用C#如何遍歷一個窗體中的某一種控制元件
如果我要遍歷所有的Label控制元件.我們知道一個窗體中的所有控制元件都是Form.Controls中的成員,想要得到窗體中的所以成員,可以用foreach來遍歷Controls屬性中的物件。注意,Controls屬性中包含的物件都是以Control基類形式存在的,這就是說我們只能用foreach(Control temp in this.Controls)來遍歷。對於任何一個由Control派生來的類,或者說是所以控制元件,可以用其 GetType()函式來得到控制元件的型別。如果要判判斷具體型別需要將型別轉為字串:tempControl.GetType().ToString()
舉例一:針對在控制元件中,有一些控制元件有子控制元件如 Panel ,GroupBox,而這些控制元件中又可能包含其它的Panel,GroupBox,所以我們必須判斷出這些“母控制元件”,並用遞迴方法對其中的控制元件遍歷!
程式碼如下,在窗體中至少有一個LISTBOX和 一個按鈕,注意每個函式接受的引數型別。
private void GetLabeinP(Panel temp) //對panel進行遍歷的函式
{
foreach(Control tempcon in temp.Controls)
{
switch(tempcon.GetType().ToString())
{
case "System.Windows.Forms.Label":
this.listBox1.Items.Add(tempcon.Name);
break;
case "System.Windows.Forms.Panel":
this.GetLabeinP((Panel)tempcon);
break;
case "System.Windows.Forms.GroupBox":
this.GetLabeinG((GroupBox)tempcon);
break;
}
}
}
private void GetLabeinG(GroupBox temp) //對GroupBox遍歷
{
foreach(Control tempcon in temp.Controls)
{
switch(tempcon.GetType().ToString())
{
case "System.Windows.Forms.Label":
this.listBox1.Items.Add(tempcon.Name);
break;
case "System.Windows.Forms.Panel":
this.GetLabeinP((Panel)tempcon);
break;
case "System.Windows.Forms.GroupBox":
this.GetLabeinG((GroupBox)tempcon);
break;
}
}
}
private void button1_Click_1(object sender, System.EventArgs e) //按鈕的程式碼
{
this.listBox1.Items.Clear();
foreach(Control tempcon in this.Controls)
{
switch(tempcon.GetType().ToString())
{
case "System.Windows.Forms.Label":
this.listBox1.Items.Add(tempcon.Name);
break;
case "System.Windows.Forms.Panel":
this.GetLabeinP((Panel)tempcon);
break;
case "System.Windows.Forms.GroupBox":
this.GetLabeinG((GroupBox)tempcon);
break;
}
}
}
舉例二:針對遍歷控制元件中的Button控制元件
foreach (Control ctl in this.Controls)
{
if (ctl is Button)
{
Button btn = ctl as Button;
btn.Enabled = false;
}
作用就是遍歷所有控制元件,判斷出型別是Button按鈕的。取得它的例項,對它進行操作