Những gì tôi đã đưa ra cho đến nay là một cái gì đó như thế này:
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);
}
}
}
}
Bây giờ bạn có thể chỉ cần gọi ClearControls phương pháp khuyến nông như thế này:
private void button1_Click(object sender, EventArgs e)
{
this.Controls.ClearControls();
}
EDIT: Tôi vừa bổ sung thêm một phương pháp ClearControls chung sẽ xóa tất cả các điều khiển của loại đó, có thể được gọi như sau:
this.Controls.ClearControls<TextBox>();
Hiện tại, nó sẽ chỉ xử lý các điều khiển mức cao nhất và sẽ không đào sâu qua các hộp nhóm và bảng điều khiển.
Nguồn
2008-11-18 01:02:15
một ví dụ hấp dẫn! cảm ơn. – BillW