1. 程式人生 > >用C#如何遍歷一個窗體中的某一種控制元件

用C#如何遍歷一個窗體中的某一種控制元件

      如果我要遍歷所有的Label控制元件.我們知道一個窗體中的所有控制元件都是Form.Controls中的成員,想要得到窗體中的所以成員,可以用foreach來遍歷Controls屬性中的物件。注意,Controls屬性中包含的物件都是以Control基類形式存在的,這就是說我們只能用foreach(Control temp in this.Controls)來遍歷。對於任何一個由Control派生來的類,或者說是所以控制元件,可以用其 GetType()函式來得到控制元件的型別。如果要判判斷具體型別需要將型別轉為字串:tempControl.GetType().ToString()    

它得到的是一個控制元件的完整名字,如:System.Windows.Forms.Label

     舉例一:針對在控制元件中,有一些控制元件有子控制元件如 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按鈕的。取得它的例項,對它進行操作