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