清除Winform文本框代码段说明

时间:2018-06-04 13:33:17

标签: c# winforms lambda

c#的新手

我试图清除winform中的所有文本框,这段代码来自:

How to clear the text of all textBoxes in the form?

完成这项工作,但有人可以向我解释它在做什么吗?

process._getActiveHandles();
process._getActiveRequests();

2 个答案:

答案 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);
}