我已經創建了八個文本框,現在我希望每當任何用戶在任何文本框中執行textchanged事件時,都會禁用按鈕。在winforms中爲文本框設置TextChanged事件
我是否需要將textChanged事件綁定到所有文本框,還是有更好的方法?
如果後來我想在我的winforms中使用更多的文本框會怎麼樣?
我已經創建了八個文本框,現在我希望每當任何用戶在任何文本框中執行textchanged事件時,都會禁用按鈕。在winforms中爲文本框設置TextChanged事件
我是否需要將textChanged事件綁定到所有文本框,還是有更好的方法?
如果後來我想在我的winforms中使用更多的文本框會怎麼樣?
如果你不希望有相同的事件處理程序8+文本框設計結合某些原因,你可以這樣做編程的形式加載事件:
private void MainForm_Load(object sender, EventArgs e)
{
foreach (Control maybeTextBox in Controls)
{
if (maybeTextBox is TextBox)
{
maybeTextBox.TextChanged += new EventHandler(maybeTextBox_TextChanged);
}
}
}
唯一這個問題是,如果任何文本框是另一個控制裏面,你需要寫一個遞歸查找方法是這樣的:
public static Control[] GetControls(Control findIn)
{
List<Control> allControls = new List<Control>();
foreach (Control oneControl in findIn.Controls)
{
allControls.Add(OneControl);
if (OneControl.Controls.Count > 0)
allControls.AddRange(GetControls(oneControl));
}
return allControls.ToArray();
}
您可以調用該方法在窗體上,所以原來的代碼將成爲:
foreach (Control maybeTextBox in GetControls(this))
這聽起來像一個很好的解決方案。 – 2010-12-20 01:56:07