0

我知道在 Form.Designer.cs 中单击按钮的标准代码是:

this.button1.Click += new System.EventHandler(this.button_Click);

以及格式中的标准代码:

private void button_Click(object sender, EventArgs e)
        {
        }

将变量从 Form.Designer.cs 传递给 Form 的方法是什么?是否可以写:

private void button_Click(object sender, EventArgs e, int variable)
        {
        }

在表单设计器中,我尝试编写

this.button1.Click += new System.EventHandler(this.button_Click(,,1);

但它要求我声明 object sender 和 EventArgs e,而我不知道该放什么。

4

2 回答 2

0

标准控件的事件处理程序的签名不能与 NET Framework 程序员已建立的签名不同。
Button Click 事件(以及标准控件的所有其他事件处理程序)总是接收两个参数,第一个是发送者(或发起事件的控件,第二个是简单的 EventArg 或另一个更复杂的类,如果有更多详细信息需要处理事件。

你无法改变这一点。请记住,调用该事件处理程序的是框架代码,而不是您。框架如何知道您想要传递一个额外的变量并动态更改其代码以适应您的请求?

如果您想在多个按钮之间共享相同的事件处理程序,有多种方法可以识别单击的按钮。

一、最干净的方式,每个按钮都有名字

private void button_Click(object sender, EventArgs e)
{
    // I assume that only buttons are assigned to this event
    Button btn = sender as Button;
    if(btn.Name == "button1")
       ,,,,
    else
       ...
}

另一种方法是通过Tag财产。您可以使用表单设计器或在代码中将此属性设置为所需的值。使用代码,您还可以将 Tag 属性设置为比字符串更复杂的内容

...
MyClass c = new MyClass();
button1.Tag = c;
....

private void button_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    MyClass t = btn.Tag as MyClass
    if(t != null) 
       ......
}
于 2014-02-15T23:10:35.820 回答
0

添加另一个方法并在其中执行您的实现的最简单方法。例如为事件处理程序添加此方法:

private void button_Click(object sender, EventArgs e)
{

}

然后附加事件处理程序:

this.button1.Click += new System.EventHandler(this.button_Click);

然后添加另一个接受您要传递的参数的方法:

private void button_ClickImpl(object sender, EventArgs e, int variable)
{

}

然后在您的button_Click事件内部,您可以通过传递参数来调用此方法,例如:

 private void button_Click(object sender, EventArgs e)
 {
     button_ClickImpl(sender, e, 2323);
 }
于 2014-02-15T23:18:21.540 回答