5

I want to a pass local object to the event handler. How can I do that? For example, how can I reference the "graphic" object, which is declared in the main function below, in the event handler function "hyperlinkButton_Click"?

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

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

    void hyperlinkButton_Click(object sender, EventArgs e)
    {

    }
wonea
  • 4,425
  • 17
  • 82
  • 137
lwconquer
  • 825
  • 1
  • 8
  • 17

3 Answers3

11

Use a delegate or a lambda expression.

hyperlinkButton.Click += (sender, e) => HandleGraphic(graphic, sender, e);
JSBձոգչ
  • 39,735
  • 16
  • 97
  • 166
1

You could try closing on the graphic variable:

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

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

This would not be a good idea if you eventually need to remove the event handler manually. Alternatively, you could make graphic a field instead of a local variable.

Kirk Woll
  • 73,473
  • 21
  • 178
  • 189
1
   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;
    }

but not good way.

Nario
  • 541
  • 6
  • 16