Pergunta

Gostaria de passar uma referência de um método para outro método e armazená-lo como uma variável. Mais tarde, eu gostaria de usar esta referência para definir um manipulador de eventos.

Ao fazer um manipulador de eventos, uma referência método é passado como:

myButton.Click += new RoutedEventHandler(myButton_Click);

E se você olhar para o construtor para "RoutedEventHandler" de INTELLISENSE, parece que:

RoutedEventHandler(void(object, RoutedEventArgs))

O que eu gostaria de fazer é passar o método "MyButton_Click" a um método estático diferente e, em seguida, criar um manipulador de eventos lá. Como faço para passar a referência para o método estático? Eu tentei o seguinte mas não 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);
    }
}

Obrigado, Ben

Foi útil?

Solução

Para fazer referência a um método de referência (chamado delegar no. NET), use o nome Handler, em vez da assinatura.

public class EventBuilder
{
    private static RoutedEventHandler _buttonClickHandler;

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

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

Outras dicas

try

private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top