作为一个论点无效

时间:2014-10-23 16:08:59

标签: c# delegates argument-passing

我用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)

非常感谢。

1 个答案:

答案 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
)

这将告诉您该签名的返回类型和参数类型。