Как передать дополнительную локальную переменную объекта в обработчик событий?
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;
}
но не очень хорошо.