簡體   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