Question

J'aimerais passer une référence d'une méthode à une autre méthode et la stocker en tant que variable. Plus tard, j'aimerais utiliser cette référence pour définir un gestionnaire d'événements.

Lors de la création d'un gestionnaire d'événements, une référence de méthode est transmise telle que:

myButton.Click += new RoutedEventHandler(myButton_Click);

Et si vous examinez le constructeur de "RoutedEventHandler" de intelliSense, cela ressemble à:

RoutedEventHandler(void(object, RoutedEventArgs))

Ce que je voudrais faire est de transmettre la méthode "myButton_Click". à une méthode statique différente, puis créez un gestionnaire d'événements à cet endroit. Comment puis-je passer la référence à la méthode statique? J'ai essayé ce qui suit mais ça ne compile pas:

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);
    }
}

Merci, Ben

Était-ce utile?

La solution

Pour référencer une référence de méthode (appelée délégué dans. NET), utilisez le nom du gestionnaire plutôt que la signature.

public class EventBuilder
{
    private static RoutedEventHandler _buttonClickHandler;

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

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

Autres conseils

essayer

private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top