Как передать дополнительную локальную переменную объекта в обработчик событий?

1 lwconquer [2011-04-13 19:30:00]

Я хочу передать локальный объект обработчику событий. Как я могу это сделать? Например, как я могу ссылаться на "графический" объект, который объявлен в основной функции ниже, в функции обработчика события "hyperlinkButton_Click"?

    void main()
    {
        Graphic graphic = new Graphic();

        hyperlinkButton.Click+=new RoutedEventHandler(hyperlinkButton_Click);
    }

    void hyperlinkButton_Click(object sender, EventArgs e)
    {

    }

c# handler events silverlight


3 ответа


6 Решение JSBձոգչ [2011-04-13 19:34:00]

Используйте делегат или выражение лямбда.

hyperlinkButton.Click += (sender, e) => HandleGraphic(graphic, sender, e);

1 Kirk Woll [2011-04-13 19:34:00]

Вы можете попробовать закрыть значение переменной graphic:

void main()
{
    Graphic graphic = new Graphic();

    hyperlinkButton.Click += (sender, e) => 
    {
        graphic.Blah(); 
    };
}

Это не будет хорошей идеей, если вам в конечном итоге нужно удалить обработчик событий вручную. В качестве альтернативы вы можете сделать graphic поле вместо локальной переменной.


0 Nario [2011-04-13 22:38:00]

   void main()
    {
        Graphic graphic = new Graphic();
        hyperlinkButton.Tag = graphic;
        hyperlinkButton.Click+=new RoutedEventHandler(hyperlinkButton_Click);
    }

    void hyperlinkButton_Click(object sender, EventArgs e)
    {
       Graphic graphic =(sender as HyperlinkButton).Tag as Graphic;
    }

но не очень хорошо.