Da die Menschen haben bereits darauf hingewiesen, wenn Sie auf der Suche nach „MouseDown-“, dann gibt es keine Notwendigkeit zu überprüfen.
Wenn Sie jedoch einen Ansatz benötigen, der Reflektion verwendet, die einen Handler an ein Ereignis anfügt, geben Sie den Namen des Handlers und den Namen des Ereignisses als Strings an, dann können Sie das folgendermaßen tun.
Dieser Code legt den Event-Handler mit einem Ereignis in einem Behälter in jedes Kontroll verschachtelt, die den angegebenen Namen übereinstimmt:
public void HookUp(Control container, string handlerName, string eventName)
{
MethodInfo eventHandler = this.GetType().GetMethod(handlerName, BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var control in container.Controls.Cast<Control>())
{
var ev = control.GetType().GetEvent(eventName);
if (ev == null)
continue;
var d = Delegate.CreateDelegate(ev.EventHandlerType, this, eventHandler);
ev.AddEventHandler(control, d);
}
}
Als Beispiel der Maus nach unten Handler würde wie folgt aussehen:
private void mouseEventHandler(object sender, MouseEventArgs e)
{
Debug.WriteLine(e.Button);
}
Und Sie es von einem geeigneten Ort (wie ein Formularkonstruktor) nennen könnte wie folgt:
public Form1()
{
InitializeComponent();
HookUp(this, "mouseEventHandler", "MouseDown");
}
die
folgende Anmerkung:
- Dies scheint eine seltsame Sache tun zu wollen. Ich habe das Gefühl, dass es eine viel bessere Möglichkeit geben wird, sich Ihrem Problem zu nähern (es klingt wie ein X-Y-Problem).
- Dies wird NICHT von der Veranstaltung abbestellt. Sie müssten dies in der dispose-Methode des Formulars tun, indem Sie eine ähnliche Art von Code verwenden und stattdessen nur
.RemoveEventHandler()
aufrufen.
Obwohl Sie dies mithilfe der Reflektion tun könnten, um die angegebenen Ereignisse zu finden, besteht das Problem hier darin, den Handler-Code anzugeben. Wie würden Sie erwarten, dass der HF aussieht?Verschiedene Ereignisse können unterschiedliche Argumente haben. –
@MatthewWatson in .net Ich glaube, Handler müssen eine bestimmte Definition haben, je nachdem, welches Ereignis sie behandeln. also würde ich erwarten, dass es in diesem Fall die passende Definition für mousedown hat, da ich nach mouse down suche. – codemonkeyliketab
Ist das nur für 'MouseDown'? Jede 'Steuerung' hat ein 'MouseDown'-Ereignis .... das muss nicht überprüft werden. –