我有一个事件处理程序,我想将一些参数传递给事件
这样,该行触发了一个错误:方法名称预期
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);
}
我有类似这样的课程myventargs
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.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
是事件处理程序。
您不发送发送者和事件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"];
...
}