4

I want to pass an argument to an event handler which I am trying to achieve with this code:

    private void openInputImagesToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ...
        pb.MouseDoubleClick += new MouseEventHandler((sender,e) => showLargeImage(sender,e,imageIndex));
    }

    private void showLargeImage(object sender, MouseEventArgs e, int imageIndex)
    {
        ...
    }

However, I am getting an error on "sender" and "e" variables inside the adapter:

A local variable named 'sender' cannot be declared in this scope because it would give a different meaning to 'sender', which is already used in a 'parent or current' scope to denote something else.

A local variable named 'e' cannot be declared in this scope because it would give a different meaning to 'sender', which is already used in a 'parent or current' scope to denote something else.

How can I solve this?

c0dehunter
  • 6,412
  • 16
  • 77
  • 139

3 Answers3

4

You can't name the parameter of your lambda method sender and e, as the compiler tells you.

It would create a ambiguity between the parameter sender of the openInputImagesToolStripMenuItem_Click method and the parameter of the lambda method.

Just use other names, like

pb.MouseDoubleClick += new MouseEventHandler((s, e1) => showLargeImage(s, e1,imageIndex));
sloth
  • 99,095
  • 21
  • 171
  • 219
1

Should be enough to change sender to something else, say se:

 pb.MouseDoubleClick += 
              new MouseEventHandler((se,e) => showLargeImage(se,e,imageIndex));
Tigran
  • 61,654
  • 8
  • 86
  • 123
1

You have redefinition of sender and e inside your lambda and that is no allowed:

private void openInputImagesToolStripMenuItem_Click(object sender, EventArgs e)
{
    ...
    pb.MouseDoubleClick += new MouseEventHandler((s,x) => showLargeImage(sender,e,imageIndex));
}
gzaxx
  • 17,312
  • 2
  • 36
  • 54