在 Winform 开发中,窗体(Form)就像一个大容器,可以装各种各样的控件,包括 Panel控件。如果窗体是 Winform 中的最大的容器,那么 Panel控件可以算是老二,它专门用于软件界面的排版,相当于 Web 开发中的层(div),几乎所有控件都可以包含到 Panel 中,包括窗体。

  把控件包含到 Panel 中,一方面是为界面布局美观(填充不同的背景颜色或图片),另一方面便于对子控件进行相关的操作。可以通过遍历的方式获取控件中包含的所有子控件,从而实现对它们的操作,下面就看如何遍历窗体中和 Panel 中的子控件。

  一、C#遍历窗体控件

  主要遍历属于窗体(Form)的控件(Controls),假如窗体中有 Panel、Button 和 TextBox 控件,遍历代码如下:

  /// <summary>
  /// Winform C#遍历窗体控件
  /// </summary>
  /// <param name="ctrlName">控件名称</param>
  public void ForeachFormControls(string ctrlName)
  {
    foreach (Control ctrl in this.Controls)
    {
      if (ctrl is Panel)
      {
        //相关操作代码
        ctrl.BackColor = Color.Aquamarine;
      }
      else if (ctrl is Button)
      {
        ctrl.ForeColor = Color.RoyalBlue;
      }
      else if (ctrl is TextBox)
      {
        ctrl.Text = null;
      }

      //根据控件名称找某个控件
      if(ctrl.Name.Equals(ctrlName))
      {
        vctrl.Name = string.Empty;
      }
    }
  }

  上面的代码,只是根据控件的类型和传递的控件名称进行了一些随意操作,可以根据具体需求把它改为所需操作。

  二、C# Winform遍历控件之遍历 Panel 中的子控件

  遍历方法跟遍历窗体中的控件相同,只不过 this 要改为 Panel 的名称,假如 Panel控件中只包含 Button 和 TextBox 子控件,代码如下:

  /// <summary>
  /// C#遍历子控件
  /// </summary>
  /// <param name="ctrlName">控件名称</param>
  public void ForeachPanelControls(string ctrlName)
  {
    foreach (Control ctrl in panel1.Controls)
    {
      if (ctrl is Button)
      {
        if (ctrl.Name.Equals(ctrlName))
          ctrl.ForeColor = Color.RoyalBlue;
        else
          ctrl.ForeColor = Color.SkyBlue;
      }
      else if (ctrl is TextBox)
      {
        if (ctrl.Name.Equals(ctrlName))
          ctrl.Name = "当前值";
        else
          ctrl.Text = null;
      }
    }
  }

2、局部控件为userControl(uWgter),在TabelLayoutPanel查询userControl(tlp_wgters)的存在,并加入list

            PubSource.Wgters = new List<uWgter>();
foreach (Control ct in this.tlp_Wgters.Controls)
{
if (ct is uWgter)
{
PubSource.Wgters.Add((uWgter)ct);
}
}
遍历list中uWgter,断连         
        foreach(uWgter wgter in PubSource.Wgters)
{
wgter.DisconnectWgter();
}

  

c# 循环界面控件的更多相关文章

  1. C#多线程操作界面控件的解决方案(转)

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  2. InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)

    http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...

  3. 解析大型.NET ERP系统 灵活复杂的界面控件Infragistics WinForms

    Infragistics 是.NET平台优秀的控件供应商,囊括了WinForms,ASP.NET,Silverlight,WPF,Windows Phone等所有关于微软.NET技术的界面控件.借助于 ...

  4. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

    在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...

  5. WinForm开发-界面控件到实体,实体到界面控件自动绑定

    在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

  6. 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...

  7. 转--基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    原文  http://www.cnblogs.com/wuhuacong/p/3317223.html 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...

  8. [转]几个开源的.net界面控件

    转自原文 几个不错的开源的.net界面控件,介绍几个自己觉得不错的几个开源的.net界面控件. DockPanel Suite:开发类似VS.net的界面,#Develop就是使用的这个控件. 网址: ...

  9. Qt中如果通过QStyle自定义能够跨平台的界面控件

    我们经常会碰到需要定制界面控件的要求.如果只是在一个平台上,比如说你的控件只需要在Windows上显示,那很好办,Hard code 你的look and feel就可以了.但是如果界面需要在不同平台 ...

随机推荐

  1. 编程练习:求某个数的n次方,返回其个位和十位

    #!/usr/bin/env python def pow1(n,m): if m==0: return 1 if m==-1: return (1/n) if m & 1 != 0: ret ...

  2. xfpt 连接Linux失败问题

    首先切换到root用户 1. su 未设置root密码的可以使用一下命令 sudo passwd root 一.上传文件失败(一动不动) 1.安装ftp服务 apt-get install vsftp ...

  3. 解题报告:luogu P5020(NOIP 2018 D1T2)

    题目链接:P5020 货币系统 \(NOIP\) 的题挺精华啊. 开始感觉自己有隐约的思路,但感觉太暴力,连数据范围都没看,就去看题解了(不会啊). 听说是\(dp\)又是一惊,直接弃疗. 其实只是个 ...

  4. 彻底理解JavaScript中的this

    this 是 JavaScript 语言的一个关键字. 它是函数运行时,在函数体内自动生成的一个对象,只能在函数体内使用. 函数的不同使用场合,this 有不同的值.总的来说,this 就是函数运行时 ...

  5. Debian安装wine运行Windows软件

    1.sudo dpkg --add-architecture i386,使系统支持32位应用 2.wget -nc https://dl.winehq.org/wine-builds/Release. ...

  6. Jupyter Notebooks usage

    Important note: You should always work on a duplicate of the course notebook. On the page you used t ...

  7. dedecms 栏目目录用首字母生成的方法

    修改dede/catalog.add.php文件 85行 $toptypedir = GetPinyin(stripslashes($toptypename)); 修改为 $toptypedir = ...

  8. 《ES6标准入门》(阮一峰)--10.对象的扩展

    1.属性的简洁表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz // ...

  9. Golang的基础数据类型-布尔型

    Golang的基础数据类型-布尔型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.bool类型概述 bool类型的取值范围: bool类型的值只有两种,其值不为真即为假,可以用 ...

  10. 2.10 学习总结 之 JQ加强

    一.说在前面  昨天 完成了体温统计APP的编写 今天 学习json数据结构 二.学习总结 1.json数据结构 1)什么是json: JSON(JavaScript Object Notation) ...