繁体   English   中英

方法名称应为C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM