2011-12-23 88 views
0

我想在事件列表的屬性框中使用帶參數的函數。這個即使是右邊的列表框也只允許一些帶有對象sender和eventargs e的函數,並且不會顯示帶有參數的自定義函數。這是一種普遍的行爲還是我應該尋找一個錯誤?我可以將值傳遞給事件處理函數嗎?

+0

請問您事件的工作,當你給它綁定? – 2011-12-23 14:06:47

+0

您可以設置自定義事件參數(EventArgs的自繼承)對象爲e。 – 2011-12-23 14:08:59

回答

1

您可以簡單地使用按鈕的CommandArgument

yourButton.Click += new EventHandler(yourButton_Click); yourButton.CommandArgument = "your parameters";

,並在事件處理方法執行以下操作:

string yourParameters = (sender as Button).CommandArgument.ToString()

希望這有助於。

1

寫下EventArgs的後代。

例如

public class MyEventArgs: EventArgs { 
    public MyEventArgs(string arg1, int arg2) { 
     this.MyValue = arg1; 
     this.MyNumber = arg2; 
    } 

    public string MyValue; 
    public int MyNumber; 

} 

NOW的它是一個EventHandler一個不錯的參數,當你寫一個E,將有myvalue的和mynumber的性能。

0

Button.Click被定義爲它,並且無法對其進行更改。但是,

yourButton.Click += delegate { YourButton_click(1); } 

會做這項工作。

0

,你只能在對應的事件聲明(委託簽名)的註冊事件處理程序。

如果要使用預定義的事件,不創建自己的,你必須遵循的事件處理程序簽名

0

使用的.Net事件的正確方法如下:

  • 使用委託與恰好有兩個參數,sendereEventHandler
  • 結束此委託的名稱。 sender必須是object,並且應該包含對引發該事件的類的實例的引用。 e必須是從EventArgs繼承的類型(通常爲EventArgs本身)。 e是包含事件數據的實例。

您不能指望找到任何其他事件處理程序簽名,它總是(object sender, XXXEventArgs e)

注意,當你提出的事件,並不需要通過事件數據,EventArgs.Empty應該被使用。

public delegate void MyEventHandler(object sender, EventArgs e); 

public event MyEventHandler MyEvent; 

public void OnMyEvent() 
{ 
    if (this.MyEvent != null) 
    { 
     this.MyEvent(this, EventArgs.Empty); 
    } 
} 
相關問題