清除表单C#上的所有控件的最佳方式是什么?

我记得看到有人在一段时间之前就问这个问题,但我做了一个搜索,找不到任何东西.

我试图想出最清晰的方式将表单上的所有控件都清除回认值(例如,清除文本框,取消选中复选框).

你会怎么样呢?

解决方法

到目前为止我所提到的是这样的:
public static class extenstions
{
    private static Dictionary<Type,Action<Control>> controldefaults = new Dictionary<Type,Action<Control>>() { 
            {typeof(TextBox),c => ((TextBox)c).Clear()},{typeof(CheckBox),c => ((CheckBox)c).Checked = false},{typeof(ListBox),c => ((ListBox)c).Items.Clear()},{typeof(RadioButton),c => ((RadioButton)c).Checked = false},{typeof(GroupBox),c => ((GroupBox)c).Controls.ClearControls()},{typeof(Panel),c => ((Panel)c).Controls.ClearControls()}
    };

    private static void FindAndInvoke(Type type,Control control) 
    {
        if (controldefaults.ContainsKey(type)) {
            controldefaults[type].Invoke(control);
        }
    }

    public static void ClearControls(this Control.ControlCollection controls)
    {
        foreach (Control control in controls)
        {
             FindAndInvoke(control.GetType(),control);
        }
    }

    public static void ClearControls<T>(this Control.ControlCollection controls) where T : class 
    {
        if (!controldefaults.ContainsKey(typeof(T))) return;

        foreach (Control control in controls)
        {
           if (control.GetType().Equals(typeof(T)))
           {
               FindAndInvoke(typeof(T),control);
           }
        }    

    }

}

现在你可以像这样调用扩展方法ClearControls:

private void button1_Click(object sender,EventArgs e)
    {
        this.Controls.ClearControls();
    }

编辑:我刚刚添加一个通用的ClearControls方法,将清除该类型的所有控件,可以这样调用

this.Controls.ClearControls<TextBox>();

目前它只会处理顶级控件,而不会通过组框和面板进行挖掘.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些