方法名称预期c#

我有一个事件处理程序,我想将一些参数传递给事件

像这样,该行触发错误:预期的方法名称

p.Click += new System.EventHandler(P_Click(sender, new MyEventArgs { design = reader1["desig_prd"].ToString(), prix = (float)reader1["prix_prd"] })); 

我的P_Click事件

 public void P_Click(Object sender, EventArgs e) { var args = (MyEventArgs)e; string deignation = args.design; MessageBox.Show(deignation); } 

我有像这样的MyEventArgs类

 class MyEventArgs : EventArgs { public string design { get; set; } public float prix { get; set; } } 

有帮助吗? 提前致谢

订阅事件处理程序时,不能将参数传递给方法。您应该只指定方法名称:

 p.Click += new EventHandler(P_Click); 

或简短表示法:

 p.Click += P_Click; 

如果你想手动触发并传递一些参数,那么你应该用这些参数调用你的方法:

 P_Click(this, new MyEventArgs { design = reader1["desig_prd"].ToString(), prix = (float)reader1["prix_prd"] }); 

但这通常是一种不好的做法,(手动触发事件处理程序方法)。在订阅事件处理程序之后使用PerformClick方法,当然P_Click为参数创建另一种方法,并从P_Click调用该方法:

 p.PerformClick(); 

把它改成这个

  p.Click += new System.EventHandler(P_Click); 

使用lambda来关闭要在事件处理程序中使用的数据:

 p.Click += (s, args) => P_Click(reader1["desig_prd"].ToString(), (float)reader1["prix_prd"]); 

你误解了事件是如何运作的。

p.Click是事件。

P_Click是事件处理程序。

您不发送发件人和事件参数 – 因为事件确实如此。 所以要挂钩事件所需要的只是p.Click += new System.EventHandler(P_Click); 或事件只是p.Click += P_Click;

你不需要MyEventArgs (至少不是这种情况),而只是在事件hadler本身中计算这些值:

 public void P_Click(Object sender, EventArgs e) { var design = reader1["desig_prd"].ToString(); var prix = (float)reader1["prix_prd"]; ... }