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

我有类似这样的课程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"];
    ...
}

相关内容

  • 没有找到相关文章

最新更新