Control类是Form和各种windows窗体控件设备的基类,属于命名空间System.Windows.Forms。每个window控件设备都有一个ControlCollection类型,ControlCollection是一个Control对象的集合,包含了属于某个控件的所有控件对象,利用Control、ControlCollection可以实现对某个窗体程序的所含的所有控件进行控制。
例如:
当我们需要重置页面内文本框时,第一个方法为对所有的textbox进行clear()操作,但是这样效率极其低下,严重影响开发速度,产生大量代码。第二个办法为通过Control实现层层递归。
private void reset(Control.ControlCollection c)
{
if (c.Count > 0)
{
foreach (Control cc in c)
{
if (cc.GetType().ToString().Equals("System.Windows.Forms.TextBox"))
{
((TextBox)cc).Clear();
}
if (cc != null)
{
reset(cc.Controls);
}
else
return;
}
}
else
return;
}
只需令reset()的参数是this.controls,即可实现层层遍历。
例如,会先查找到Form中的TextBox,再遍历Penel(如果有的话)中的TextBox。如果Penel中还有控件,则进继续遍历到下一层次查找控件中是否存在TextBox,并执行clear()函数。
通过这种方式,我们可以实现对窗体控件的多形式控制。例如,对Form中的控件进行操作:
private void fun(Form frm)
{
foreach (Control con in frm.Controls)
{
if (con is TableLayoutPanel)//如果界面中存在TableLayoutPanel控件
{
foreach (Control contrl in con.Controls)
...
}
else if (con is GroupBox)
{
foreach (Control contrl in con.Controls)
...
}
else if (con is TabControl)
{
foreach (TabPage tp in ((TabControl)con).TabPages)
{
foreach (Control contrl in tp.Controls)
{
...
}
}
}
else
{
...
}
}
}