我用c#编程。我需要一个创建Button的函数,指定它的名称和一些事件。我需要将其名称和事件作为参数传递。我这样做了:
private void createButton(string name, EventHandler hover, EventHandler click)
{
Button button = new Button();
button.Name = name;
button.Image = Properties.Resources.print_trans;
button.MouseHover += new System.EventHandler(hover);
button.Click += new System.EventHandler(click);
button.Visible = false;
this.Controls.Add(button);
}
在代码的另一部分,我进行了这些调用:
createButton("cmdPrint", this.Hover, this.Print);
createButton("cmdMark", this.Hover, this.Mark);
调用生成此错误:“createButton(string,System.EventHandler,System.EventHandler)的最佳重载方法匹配'具有一些无效参数”。
悬停和点击应该是什么类型的参数?
编辑:
强: 悬停和打印是事件:
private void Hover(object sender, EventArgs e)
{
Proofs.ShowInformation((Control)sender);
}
private void Print(object sender, EventArgs e)
{
Proofs.Print((Control).sender);
}
两条调用线产生相同的错误。
史蒂夫: 我的事件打印和悬停具有典型的事件语法,但我不知道应该具有哪种类型悬停和单击 in createButton function。
EDIT2:
我的问题解决了。我只是添加这个代表:
private delegate void Del(object sender, EventArgs e);
更改通话:
Del print = this.Imprimir;
Del hover = this.Hover;
createButton("cmdPrint", this.Hover, this.Print);
createButton("cmdMark", this.Hover, this.Mark);
并更改参数(在 createButton 中):
private void createButton(string name, Del hover, Del click)
非常感谢。
答案 0 :(得分:1)
两个EventHandler参数应该是具有此签名的函数:
void MyFunction(Object sender, EventArgs e)
如果您查找EventHandler
on the MSDN website,您可以看到此委托的语法描述为:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
Object sender,
EventArgs e
)
这将告诉您该签名的返回类型和参数类型。