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