Bộ sưu tập Biểu mẫu và bộ chứa chỉ chứa trẻ em ngay lập tức. Để có được tất cả các điều khiển, bạn cần phải đi qua cây điều khiển và áp dụng hoạt động này một cách đệ quy
private void AddTextChangedHandler(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c.GetType() == typeof(TextBox)) {
c.TextChanged += new EventHandler(C_TextChanged);
} else {
AddTextChangedHandler(c);
}
}
}
Lưu ý: Hình thức Xuất phát (gián tiếp) từ Control
như tốt và tất cả các điều khiển có một bộ sưu tập Controls
. Vì vậy, bạn có thể gọi phương thức như thế này trong hình thức của bạn:
AddTextChangedHandler(this);
Một giải pháp tổng quát hơn là tạo ra một phương pháp mở rộng áp dụng một hành động một cách đệ quy cho tất cả các điều khiển. Trong một lớp tĩnh (ví dụ WinFormsExtensions
) thêm phương pháp này:
public static void ForAllControls(this Control parent, Action<Control> action)
{
foreach (Control c in parent.Controls) {
action(c);
ForAllControls(c, action);
}
}
Không gian tên lớp tĩnh phải "nhìn thấy", nghĩa là, thêm một using
khai thích hợp nếu nó là trong không gian tên khác.
Sau đó, bạn có thể gọi nó như thế này, trong đó this
là biểu mẫu; bạn cũng có thể thay thế this
bởi một hình thức hoặc điều khiển biến mà điều khiển lồng nhau có bị ảnh hưởng:
this.ForAllControls(c =>
{
if (c.GetType() == typeof(TextBox)) {
c.TextChanged += C_TextChanged;
}
});
Nguồn
2013-03-03 14:52:00
Bạn có thể làm điều đó trong một vòng lặp đệ quy. – jac