Pregunta

Me gustaría pasar una referencia de un método a otro método y almacenarlo como una variable. Más adelante, me gustaría usar esta referencia para definir un controlador de eventos.

Al crear un controlador de eventos, se pasa una referencia de método como:

myButton.Click += new RoutedEventHandler(myButton_Click);

Y si miras el constructor para " RoutedEventHandler " desde intelliSense, parece que:

RoutedEventHandler(void(object, RoutedEventArgs))

Lo que me gustaría hacer es pasar el método " myButton_Click " a un método estático diferente y luego crear un controlador de eventos allí. ¿Cómo paso la referencia al método estático? Intenté lo siguiente pero no se compila:

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

Gracias Ben

¿Fue útil?

Solución

Para hacer referencia a una referencia de método (denominada delegate en. NET), use el nombre del controlador, en lugar de la firma.

public class EventBuilder
{
    private static RoutedEventHandler _buttonClickHandler;

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

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

Otros consejos

prueba

private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top