J'ai une forme WPF, lors de l'exécution en cas de charge ajouter les commandes suivantes de la chaîne XAMLWPF pourquoi methodInfo = object.GetType(). GetMethod ("SelectionChanged") ..... renvoie une valeur null?
// load Canvas
sXAML = "<Canvas xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'";
sXAML += " Height=\"Auto\" Name=\"canvasMain\" Width=\"Auto\">";
sXAML += " </Canvas>";
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(sXAML);
XmlTextReader xmlReader = new XmlTextReader(new StringReader(xdoc.OuterXml));
object obj = XamlReader.Load(xmlReader);
if (obj != null)
{
Canvas cnv = obj as Canvas;
this.AddChild(cnv);
this.RegisterName(cnv.Name, cnv);
}
puis ajoutez une toile un contrôle DataGrid
// load dataGrid
sXAML = "<DataGrid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'";
sXAML += " AutoGenerateColumns=\"True\" Height=\"207\" HorizontalAlignment=\"Left\" Margin=\"140,6,0,0\" Name=\"dtgListServer\" VerticalAlignment=\"Top\" Width=\"751\" AlternatingRowBackground=\"LightCyan\">";
sXAML += "</DataGrid>";
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(sXAML);
XmlTextReader xmlReader = new XmlTextReader(new StringReader(xdoc.OuterXml));
object obj = XamlReader.Load(xmlReader);
if (obj != null)
{
DataGrid dtg = obj as DataGrid;
cnv.Children.Add(dtg);
cnv.RegisterName(dtg.Name, dtg);
}
Je dois maintenant ajouter des événements à DataGrid le contrôle, mais la méthode GetMethod retourne toujours null
EventInfo ei = dtg.GetType().GetEvent(eventname);
MethodInfo mi = dtg.GetType().GetMethod(methodname, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
Delegate del = Delegate.CreateDelegate(ei.EventHandlerType, this, mi);
ei.AddEventHandler(dtg, del);
bien sûr, j'ai essayé avec la méthode « SelectionChanged » et plus drapeau mais le résultat est toujours nul quelqu'un peut me aider et indiquer où est mon erreur Je vous remercie d'avance
d'abord merci pour votre réponse. Ce n'est que récemment que j'utilise C#. Ce dont j'ai besoin est d'ajouter un événement à un contrôle ajouté lors de l'exécution. Pour cela j'ai trouvé EventInfo ei = dtg.GetType(). GetEvent (eventname); Puis je crée un délégué Déléguer del = Delegate.CreateDelegate (ei.EventHandlerType, .............); pour ajouter un gestionnaire d'événements ei.AddEventHandler (dtg, del); mon ignorance est de créer le délégué pour un événement – cesare
@cesare - si vous écrivez ce que vous voulez dire dans * regular * C#, je vais traduire à la réflexion pour vous. –
d'abord merci pour votre réponse. Ce n'est que récemment que j'utilise C#. Ce dont j'ai besoin est d'ajouter un événement à un contrôle ajouté lors de l'exécution. Pour cela j'ai trouvé DataGrid dtg = obj comme DataGrid; EventInfo ei = dtg.GetType(). GetEvent (nom de l'événement); Puis Je crée un délégué Délégué del = Delegate.CreateDelegate (ei.EventHandlerType, this, mi); pour ajouter un gestionnaire d'événements ei.AddEventHandler (dtg, del); mais Delegate.CreateDelegate utilise MethodInfo mi = this.GetType(). GetMethod (nomMéthode, BindingFlags.NonPublic); mon problème est de créer le délégué pour un événement pas pour une méthode – cesare