2014-02-15 96 views
0

我知道在Form.Designer.cs點擊按鈕的標準代碼:如何從一個Form.Designer.cs變量傳遞給窗體

this.button1.Click += new System.EventHandler(this.button_Click); 

並在窗體的標準碼:

private void button_Click(object sender, EventArgs e) 
     { 
     } 

將Form.Designer.cs中的變量傳遞給Form的方法是什麼? 是否可以這樣寫:

private void button_Click(object sender, EventArgs e, int variable) 
     { 
     } 

在表單設計我試着寫

this.button1.Click += new System.EventHandler(this.button_Click(,,1); 

,但它讓我申報對象發件人和EventArgs的,和兩個我不知道該怎麼放。

回答

0

標準控件的事件處理程序的簽名不能從.NET Framework程序員建立的標準中改變。
Button Click事件(以及標準控件的其他每個事件處理程序)總是接收兩個參數,第一個是發件人(或者是發起事件的控件,第二個是簡單的EventArg或另一個更復雜的類,需要詳細信息來處理事件

你不能改變它 請記住,是調用該事件處理程序的框架代碼,而不是你。框架怎麼知道你想傳遞一個額外的變量並且改變它的代碼可以隨時適應您的請求嗎?

如果您想在多個按鈕之間共享相同的事件處理程序,可以通過多種方法來識別單擊的按鈕

首先,最乾淨的方式,每個按鈕都有一個名字

private void button_Click(object sender, EventArgs e) 
{ 
    // I assume that only buttons are assigned to this event 
    Button btn = sender as Button; 
    if(btn.Name == "button1") 
     ,,,, 
    else 
     ... 
} 

另一種方式是通過Tag財產。您可以使用表單設計器或代碼將此屬性設置爲您需要的值。 使用代碼,你也可以設置標籤屬性的東西不是一個字符串

... 
MyClass c = new MyClass(); 
button1.Tag = c; 
.... 

private void button_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    MyClass t = btn.Tag as MyClass 
    if(t != null) 
     ...... 
} 
0

添加另一種方法,最簡單的方式做it.For例子裏面你實現增加對事件處理這個方法更復雜:

private void button_Click(object sender, EventArgs e) 
{ 

} 

然後連接事件處理程序:

this.button1.Click += new System.EventHandler(this.button_Click); 

再加入另一種需要你想傳遞參數的方法:

private void button_ClickImpl(object sender, EventArgs e, int variable) 
{ 

} 

然後你button_Click事件裏面,你可以調用此方法通過你的參數,例如:

private void button_Click(object sender, EventArgs e) 
{ 
    button_ClickImpl(sender, e, 2323); 
} 
相關問題