我有一个表单MainForm
,它是一个包含许多子控件的Windows Forms表单。我想在MainForm
上调用一个函数来通知所有子控件。Windows Forms表单是否提供了这样的功能?我尝试使用更新、刷新和无效化等方法,但没有成功。
foreach (Control ctrl in this.Controls)
{
// call whatever you want on ctrl
}
如果您想要访问表单上的所有控件,以及表单上每个控件上的所有控件(以此类推,递归地),请使用像这样的函数:
public void DoSomething(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
// do something to ctrl
MessageBox.Show(ctrl.Name);
// recurse through all child controls
DoSomething(ctrl.Controls);
}
}
您可以通过最初传递表单的Controls集合来调用它,就像这样:
DoSomething(this.Controls);
Action<Control> traverse = null;
//in a function:
traverse = (ctrl) =>
{
ctrl.Enabled = false; //or whatever action you're performing
traverse = (ctrl2) => ctrl.Controls.GetEnumerator();
};
//kick off the recursion:
traverse(rootControl);
没有,你必须自己编写。
另外一方面 - WPF 有“路由事件”,可以实现这个功能甚至更多。
void NotifyChildren( control parent )
{
if ( parent == null ) return;
parent.notify();
foreach( control child in parent.children )
{
NotifyChildren( child );
}
}