c#的新手
我试图清除winform中的所有文本框,这段代码来自:
How to clear the text of all textBoxes in the form?
完成这项工作,但有人可以向我解释它在做什么吗?
process._getActiveHandles();
process._getActiveRequests();
答案 0 :(得分:3)
Action<Control.ControlCollection> func = null;
声明一个以Control.ControlCollection
为参数的委托。
func = (controls) => {... }
为委托指定一个匿名方法体,在执行时在{...}
内执行操作。
func(Controls);
执行委托,传入表单Controls
集合,其中包含表单中的所有顶级控件。
匿名方法的方法体枚举传入的ControlCollection中的控件,并清除所有文本框。对于不是TextBox
控件的控件,它会自行递归并检查控件包含的控件。这样,如果存在GroupBox
或其他控件容器,则会搜索这些控件的子项以查找TextBoxes。
通过执行以下操作,可以更简单地重写(避免委托和匿名方法):
private void ClearTextBoxes()
{
ClearTextBoxes(Controls);
}
private void ClearTextBoxes(Control.ControlCollection controls) {
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Clear();
else
ClearTextBoxes(control.Controls);
};
答案 1 :(得分:2)
func是一个递归遍历ControllCollection的lambda函数。对于遇到的每个项目,它会检查项目是否为TextBox。如果是,则清除TextBox,否则控件是自己的ControlCollection,函数再次调用自己。
如果lambda符号会让你失望,你也可以这样看待它:
private void ClearTextBoxes(){
ClearTextBoxOrContinue(Controls);
}
private void ClearTextBoxOrContinue(Control.ControllCollection controls){
// iterate over every control in controls (the 'children' of controls)
foreach (Control thisControl in controls)
if (thisControl is TextBox)
// if it is a TextBox, clear it
(thisControl as TextBox).Clear();
else
// else, iterate over thisControl's children (and/or grandchildren...)
ClearTextBoxOrContinue(thisControl.Controls);
}