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

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

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

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

    void hyperlinkButton_Click(object sender, EventArgs e)
    {

    }

person lwconquer    schedule 13.04.2011    source источник


Ответы (3)


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

hyperlinkButton.Click += (sender, e) => HandleGraphic(graphic, sender, e);
person JSBձոգչ    schedule 13.04.2011
comment
Спасибо за Ваш ответ. Я попробую. - person lwconquer; 14.04.2011

Вы можете попробовать закрыть переменную graphic:

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

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

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

person Kirk Woll    schedule 13.04.2011
comment
Спасибо за Ваш ответ. Я попробую. - person lwconquer; 14.04.2011

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

но не хороший способ.

person Nario    schedule 13.04.2011