2010-12-20 85 views
1

我已經創建了八個文本框,現在我希望每當任何用戶在任何文本框中執行textchanged事件時,都會禁用按鈕。在winforms中爲文本框設置TextChanged事件

我是否需要將textChanged事件綁定到所有文本框,還是有更好的方法?

如果後來我想在我的winforms中使用更多的文本框會怎麼樣?

+0

這聽起來像一個很好的解決方案。 – 2010-12-20 01:56:07

回答

4

如果你不希望有相同的事件處理程序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)) 
+0

+1爲完美的解決方案。 – Xaqron 2010-12-20 02:07:32

+0

感謝您的幫助。 – Dusk 2010-12-20 02:09:48

相關問題