private void CleanForm()
{
foreach (var c in this.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = String.Empty;
}
}
}
Run Code Online (Sandbox Code Playgroud)
上述方法不起作用,并且不清除控件.编译很好,但什么都不做.
有任何想法吗?
Hom*_*mam 61
我喜欢lambda :)
private void ClearTextBoxes()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Clear();
else
func(control.Controls);
};
func(Controls);
}
Run Code Online (Sandbox Code Playgroud)
祝好运!
几周前我们遇到过这样的问题.如果你设置一个断点并深入研究this.Controls,问题就会揭示它的本质:你必须通过所有子控件来递归.
代码可能如下所示:
private void CleanForm()
{
traverseControlsAndSetTextEmpty(this);
}
private void traverseControlsAndSetTextEmpty(Control control)
{
foreach(var c in control.Controls)
{
if (c is TextBox) ((TextBox)c).Text = String.Empty;
traverseControlsAndSetTextEmpty(c);
}
}
Run Code Online (Sandbox Code Playgroud)