[Gabriel的专栏] 用C#如何遍历一个窗体中的某一种控件

转载 2006年05月18日 20:36:00
用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;

    }
     
   }  

  
  }

相关文章推荐

c#WinForm下窗体权限设计(遍历菜单下的所有菜单及所有form、form中的控件)

c#WinForm下窗体权限设计(遍历菜单下的所有菜单及所有form、form中的控件) WinForm下窗体权限设计   一、   描述 管理员通过控制窗体中的某个...

一个Splash Screen控件 (闪屏窗体 C#)

一个Splash Screen控件 (闪屏窗体 C#)

遍历winform窗体上的所有控件(包括DevExpress.XtraEditors控件)且对其做相应的处理

例一:遍历   private void Enabled_Control(Control.ControlCollection con)         {      ...

C#通过API获取接收数据窗体控件句柄,并向该句柄发送文本信息

将一组数据自动写到第三方的界面上,通过鼠标拖拽传值到数据接收界面,代替手工录入。

c# 控件随窗体大小改变

1.使用一些布局面板,比如FlowLayoutPanel,TabLayOutPanel之类,但是缺点就是样式太死了。所以本人不采用。 2.采用Dock和Anchor属性。这类虽然鼠标点几下在属性栏设...

C# WinForm窗体及其控件的自适应

C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明   2012-11-30 曾经写过 《C# WinForm窗体及其控件自适应各种屏幕分辨率》  ,其中也讲解了控件自适应的原理。近期...

C#自定义控件实现窗体绘制表格

C#自定义控件

c#中如何跨线程调用windows窗体控件?

我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。首先来看传统方法: public partial c...

C# WinForm窗体及其控件自适应各种屏幕分辨率

C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明   我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面...

C# Winform项目中多线程环境下, 如何跨线程对Window窗体控件进行安全访问?

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 个人网站: http://www.x86asm.com QQ交流: 643439947 编程生涯: 2001年~至今[共15年...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)