【问题标题】:How to pass a variable from the Form.Designer.cs to the Form如何将变量从 Form.Designer.cs 传递给 Form
【发布时间】:2014-02-15 23:05:26
【问题描述】:

我知道在 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,而我不知道该放什么。

【问题讨论】:

    标签: c# forms click designer eventargs


    【解决方案1】:

    标准控件的事件处理程序的签名不能与 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) 
           ......
    }
    

    【讨论】:

      【解决方案2】:

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

      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);
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-22
        • 2021-12-31
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多