方法名称预期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"]; ... }