清除表单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>();

目前,它将仅处理顶级控件,而不会深入研究组框和面板。

以上是 清除表单C#上所有控件的最佳方法是什么? 的全部内容, 来源链接: utcz.com/qa/419198.html

回到顶部