【问题标题】:Can I pass values to an event handling function?我可以将值传递给事件处理函数吗?
【发布时间】:2011-12-23 14:01:16
【问题描述】:

我想在带有事件列表的属性框中使用带有参数的函数。 Visual Studio 右侧的这个偶数列表框仅允许带有对象发送者和事件参数 e 的某些函数,并且不显示带有参数的自定义函数。这是一般行为还是我应该查找错误?

【问题讨论】:

  • 绑定到事件后是否有效?
  • 您可以在自定义Events(继承自EventArgs)对象中设置参数为e。

标签: c# .net visual-studio-2010


【解决方案1】:

您可以简单地使用按钮的CommandArgument

yourButton.Click += new EventHandler(yourButton_Click); yourButton.CommandArgument = "your parameters";

并在事件处理方法中执行以下操作:

string yourParameters = (sender as Button).CommandArgument.ToString()

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    编写 EventArgs 的后代。

    例如

    public class MyEventArgs: EventArgs {
        public MyEventArgs(string arg1, int arg2) {
            this.MyValue = arg1;
            this.MyNumber = arg2;
        }
    
        public string MyValue;
        public int MyNumber;
    
    } 
    

    现在它是一个 EventHandler 的好参数,当你写一个 e 时,将具有 MyValue 和 MyNumber 属性。

    【讨论】:

      【解决方案3】:

      Button.Click按原样定义,没有办法改变。然而,

      yourButton.Click += delegate { YourButton_click(1); }
      

      会做的。

      【讨论】:

        【解决方案4】:

        您只能在与事件声明(委托签名)相对应的事件上注册处理程序。

        如果您想使用预定义事件而不创建自己的事件,则必须遵循事件处理程序签名

        【讨论】:

          【解决方案5】:

          .Net中使用事件的正确方法如下:

          • 使用名称以EventHandler 结尾的委托
          • 这个委托有两个参数,senderesender 必须是 object 类型,并且应该包含对引发事件的类的实例的引用。 e 必须是继承自 EventArgs 的类型(通常是 EventArgs 本身)。 e 是包含事件数据的实例。

          您不能期望找到任何其他事件处理程序签名,它始终是(object sender, XXXEventArgs e)

          注意,当你引发事件并且不需要传递事件数据时,应该使用EventArgs.Empty

          public delegate void MyEventHandler(object sender, EventArgs e);
          
          public event MyEventHandler MyEvent;
          
          public void OnMyEvent()
          {
              if (this.MyEvent != null)
              {
                  this.MyEvent(this, EventArgs.Empty);
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多