在 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(); 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(); }