[英]How to pass a variable from the Form.Designer.cs to the Form
我知道在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 e,而對於這兩者我都不知道要放什么。
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
屬性。 您可以使用表單設計器或在代碼中將此屬性設置為所需的值。 使用代碼,您還可以將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)
......
}
添加另一個方法並在其中進行實現的最簡單方法,例如為事件處理程序添加此方法:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.