[英]Method name expected 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);
您误解了事件的工作方式。
p.Click
是事件。
P_Click
是事件处理程序。
您不发送发送方和事件args-因为事件发送。 因此,要挂接事件,您只需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"];
...
}
使用lambda关闭要在事件处理程序中使用的数据:
p.Click += (s, args) =>
P_Click(reader1["desig_prd"].ToString(), (float)reader1["prix_prd"]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.