Frage

Ich mag eine Referenz eines Verfahrens in einer anderen Methode zu übergeben und sie als Variable speichern. Später möchte ich an dieser Referenz verwenden, um einen Ereignishandler zu definieren.

Wenn Sie einen Ereignishandler zu machen, eine Methode Referenz geführt wird, wie:

myButton.Click += new RoutedEventHandler(myButton_Click);

Und wenn Sie an den Konstruktor für „RoutedEventHandler“ Blick von IntelliSense, es sieht aus wie:

RoutedEventHandler(void(object, RoutedEventArgs))

Was würde Ich mag es tun, um die Methode „MyButton_Click“ pass auf eine andere statische Methode und dann einen Ereignishandler dort erstellen. Wie kann ich den Verweis auf die statische Methode übergeben? Ich habe versucht, die folgenden aber nicht kompilieren:

public class EventBuilder
{
    private static void(object, RoutedEventArgs) _buttonClickHandler;

    public static void EventBuilder(void(object, RoutedEventArgs) buttonClickHandler)
    {
        _buttonClickHandler = buttonClickHandler;
    }

    public static void EnableClickEvent()
    {
        myButton.Click += new RoutedEventHandler(_buttonClickHandler);
    }
}

Danke, Ben

War es hilfreich?

Lösung

eine Methode Referenz referenzieren (eine so genannte Delegat rel="nofollow. NET), verwenden Sie den Handler Namen, anstatt die Unterschrift.

public class EventBuilder
{
    private static RoutedEventHandler _buttonClickHandler;

    public EventBuilder(RoutedEventHandler buttonClickHandler)
    {
        _buttonClickHandler = buttonClickHandler;
    }

    public static void EnableClickEvent()
    {
        myButton.Click += new RoutedEventHandler(_buttonClickHandler);
    }
}

Andere Tipps

Versuch

private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top