用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;

    }
     
   }  

  
  }

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值