Domanda

Vorrei passare un riferimento a un metodo in un altro metodo e memorizzarlo come variabile. Successivamente, vorrei utilizzare questo riferimento per definire un gestore eventi.

Quando si crea un gestore di eventi, viene passato un riferimento al metodo come:

myButton.Click += new RoutedEventHandler(myButton_Click);

E se guardi il costruttore per " RoutedEventHandler " da intelliSense, sembra:

RoutedEventHandler(void(object, RoutedEventArgs))

Quello che vorrei fare è passare il metodo " myButton_Click " a un diverso metodo statico e quindi creare un gestore eventi lì. Come passo il riferimento al metodo statico? Ho provato quanto segue ma non viene compilato:

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

Grazie, Ben

È stato utile?

Soluzione

Per fare riferimento a un metodo di riferimento (chiamato delegato in. NET), utilizzare il nome del gestore, anziché la firma.

public class EventBuilder
{
    private static RoutedEventHandler _buttonClickHandler;

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

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

Altri suggerimenti

try

private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top