Trong C # (vì bạn đã gắn thẻ nó như vậy), bạn có thể sử dụng biểu thức LINQ như sau:
List<Control> c = Controls.OfType<TextBox>().Cast<Control>().ToList();
Chỉnh sửa cho đệ quy:
Trong ví dụ này, trước tiên bạn tạo danh sách các điều khiển và sau đó gọi một phương thức để điền nó. Vì phương thức này là đệ quy nên nó không trả về danh sách mà chỉ cập nhật nó.
List<Control> ControlList = new List<Control>();
private void GetAllControls(Control container)
{
foreach (Control c in container.Controls)
{
GetAllControls(c);
if (c is TextBox) ControlList.Add(c);
}
}
Có thể thực hiện điều này trong một câu lệnh LINQ bằng cách sử dụng Descendants
hàm, mặc dù tôi không quen thuộc với nó. Xem trang này để biết thêm thông tin về điều đó.
Chỉnh sửa 2 để trả lại một bộ sưu tập:
Như @ProfK đã đề xuất, một phương pháp chỉ trả về các điều khiển mong muốn có lẽ là phương pháp tốt hơn. Để minh họa điều này, tôi đã sửa đổi mã như sau:
private IEnumerable<Control> GetAllTextBoxControls(Control container)
{
List<Control> controlList = new List<Control>();
foreach (Control c in container.Controls)
{
controlList.AddRange(GetAllTextBoxControls(c));
if (c is TextBox)
controlList.Add(c);
}
return controlList;
}