Control類是Form和各種Windows 窗體控件設備的基類,屬於System.Windows.Forms命名空間,每個window控件設備都有一個Controls屬性,這個屬性為ControlCollection類型,ControlCollection為一個Control對象的集合,包含的是屬於某個控件的所有控件對象,利用Control和ControlCollection我們可以輕松地對某個窗體程序所含的各種控件進行控制。 當我們開發具有錄入功能的界面的時候,為了防止提交后的二次(重復)錄入,希望點擊提交按鈕並提示成功后,界面的所有文本框能夠自動清空,一個笨方法是逐個的對TextBox進行Clear()操作,這種方法會產生大量的代碼,並且效率很低。
對於上面所述的清空操作,可以仔細想一想,既然每個窗體控件都是繼承自Control類,並且含有Controls屬性,那利用Control和ControlCollection,利用函數的層層遞歸,就可以輕松實現Clear()操作,代碼如下:
//清空頁面textbox的方法 小技巧 private void Process(Control.ControlCollection c) { if (c.Count > 0) { foreach (Control c1 in c) { //System.Windows.Forms.TextBox 僅限於windows自帶的textbox控件 //使用第三方控件 傳入對應的語句 //如 DotNetbar 傳入 DevComponents.DotNetBar.Controls.TextBoxX if ((c1.GetType().ToString().Equals("System.Windows.Forms.TextBox"))) { ((TextBox)c1).Clear(); } if (c1 != null) { Process(c1.Controls); } else { return; } } } else { return; } } private void buttonX1_Click(object sender, EventArgs e) { //調用方法 Process(this.Controls); }
只需令Process()函數的參數為this.Controls,該函數就會層層遍歷,先查找直接放在Form中的TextBox,再遍歷到Panel(如果有的話),查找Panel中的TextBox,如果Panel中還有其他控件,就接着查找下一層次中的控件是否有Textbox,找到以后執行Clear()函數即可。這只是一個例子,利用這種形式的函數,我們可以對窗體控件進行很多種形式的控制。