我可以将值传递给事件处理函数吗?

时间:2011-12-23 14:01:16

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

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

5 个答案:

答案 0 :(得分:1)

编写EventArgs的后代。

e.g。

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属性。

答案 1 :(得分:1)

您只需使用按钮的CommandArgument即可。

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

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

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

希望这有帮助。

答案 2 :(得分:0)

Button.Click被定义为,并且无法更改它。然而,

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

将完成这项工作。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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