C#-如何使用变量命名带有数字后缀的新事件处理程序?

C#-如何使用变量命名带有数字后缀的新事件处理程序?,c#,events,handler,C#,Events,Handler,我正在以编程方式创建新的图片框及其单击事件处理程序。但是我不能单独使用它们,因为我不能正确命名它们。我需要命名事件处理程序,如box1\u click,box2\u click 最简单的命名新事件处理程序的方法是什么 我的尝试: for(i=1; i<11; i++) { boxes[i] = new PictureBox(); boxes[i].Name = "box" + i; boxes[i].Click += new EventHandler( ??? ); }

我正在以编程方式创建新的图片框及其单击事件处理程序。但是我不能单独使用它们,因为我不能正确命名它们。我需要命名事件处理程序,如box1\u click,box2\u click

最简单的命名新事件处理程序的方法是什么

我的尝试:

for(i=1; i<11; i++)
{
   boxes[i] = new PictureBox();
   boxes[i].Name = "box" + i;
   boxes[i].Click += new EventHandler( ??? );
}

对于(i=1;i您应该始终使用相同的事件处理程序。在处理程序中,您将决定发送方参数必须执行的操作。

有多种方法

您可以将事件处理程序添加为lambda表达式,该表达式通过如下反射调用每个特定处理程序(请确保将处理程序定义为公共方法):

另一个选项是使用delegate.CreateDelegate创建委托事件处理程序,而不是像这样的lambda表达式:

MethodInfo method = this.GetType().GetMethod("B_Click" + i.ToString());
EventHandler handler = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), this, method);
boxes[i].Click += handler;
boxes[i].Click += B_Click;

最好的选择可能是为所有PictureBox定义一个处理程序,并将sender对象强制转换为单击的PictureBox,如下所示:

MethodInfo method = this.GetType().GetMethod("B_Click" + i.ToString());
EventHandler handler = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), this, method);
boxes[i].Click += handler;
boxes[i].Click += B_Click;


这可能会有帮助(重复?)不同的事件处理程序在不同的PictureBox上会共享相同的行为吗?在这种情况下,一个事件处理程序可能适合您,您可以通过以下方式获得相应的PictureBox:PictureBox ThePictureBox=(PictureBox)发件人。那么,我如何确定我单击了哪个图片框?有没有示例?谢谢!!获取单击图片框的名称解决了我的问题。现在我可以将所有图片框用于单独的任务。(我使用了最后一个选项。)
boxes[i].Click += B_Click;
private void B_Click(object sender, EventArgs e)
{
    PictureBox clickedPictureBox = sender as PictureBox;
    if (clickedPictureBox != null)
    {
        string name = clickedPictureBox.Name; // for example get picture box name
    }
}