可以将值传递给事件处理函数吗?
本文关键字:事件 处理函数 值传 | 更新日期: 2023-09-27 18:18:45
我想在事件列表的属性框上使用带有参数的函数。visual studio右边的这个列表框只允许一些带有对象发送器和事件参数的函数,而不显示带有参数的自定义函数。这是一个普遍的行为还是我应该寻找一个错误?
您可以简单地使用按钮的CommandArgument
yourButton.Click += new EventHandler(yourButton_Click);
yourButton.CommandArgument = "your parameters";
和事件处理程序方法中执行以下操作:
string yourParameters = (sender as Button).CommandArgument.ToString()
编写EventArgs的后代。
。
public class MyEventArgs: EventArgs {
public MyEventArgs(string arg1, int arg2) {
this.MyValue = arg1;
this.MyNumber = arg2;
}
public string MyValue;
public int MyNumber;
}
现在它是一个ok参数的EventHandler,当你写一个e,将有MyValue和MyNumber属性
Button.Click
就是这样定义的,没有办法改变。然而,
yourButton.Click += delegate { YourButton_click(1); }
你只能注册与事件声明(委托签名)相对应的事件处理程序。
如果你想使用预定义的事件而不创建自己的事件,你必须遵循事件处理程序签名
在。net中使用事件的正确方法如下:
- 使用名称以
EventHandler
结尾的委托 - 这个委托有两个参数,
sender
和e
。sender
必须是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);
}
}