C#没有[Method]的重载匹配委托'System.EventHandler - 添加一个额外的参数

时间:2012-05-13 03:40:49

标签: c# function overloading

我对C#很新,我的作业有问题。某个按钮的点击事件我有以下内容。对于click事件,我想用名为parameterB的参数调用名为functionA的函数,这是一个double类型的数组。附加参数导致错误。我这样做的正确方法是什么?

private void button1_Click(object sender, EventArgs e, double [] parameterB)
  {
      functionA(parameterB);
  }

在Designer.cs的相应部分

this.button1.Location = new System.Drawing.Point(386, 309);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(174, 27);
this.button1.TabIndex = 25;
this.button1.Text = "Calculate Final Grade";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);

2 个答案:

答案 0 :(得分:1)

当最终用户点击您的按钮时,您不会致电button1_Click - 它会被调用。检测按钮点击的系统部分知道如何使用一种方式通知您的程序点击:通过调用带签名的方法

void OnClick(object sender, EventArgs e)

您不能在参数列表中添加或删除参数,也不能更改方法的返回类型:它必须精确匹配此签名。

现在回到parameterB:您需要它来调用functionA方法,但它不会传递给事件处理程序。你怎么得到的呢?通常,答案是将它存储在执行事件处理的对象的实例上:声明类型为double[]的实例变量,在有足够数据设置它时设置它,并将其传递给{{1来自functionA方法内部。

答案 1 :(得分:0)

当您尝试添加其他参数时,事件处理程序不再与该定义匹配。 EventHandler定义了2个参数。

发送方
键入:System.Object
事件的来源。

ë
键入:System.EventArgs
不包含事件数据的EventArgs。

您需要将 parameterB 设置为表单的属性或field。然后,您将从事件处理程序中获取 parameterB