Nếu bạn chỉ muốn những đứa trẻ ngay lập tức, sử dụng
...
var children = control.Controls.OfType<Control>();
...
Nếu bạn muốn tất cả điều khiển từ hệ thống phân cấp (ví dụ, tất cả mọi thứ trong cây dưới một sự kiểm soát nhất định), sử dụng:
private IEnumerable<Control> GetControlHierarchy(Control root)
{
var queue = new Queue<Control>();
queue.Enqueue(root);
do
{
var control = queue.Dequeue();
yield return control;
foreach (var child in control.Controls.OfType<Control>())
queue.Enqueue(child);
} while (queue.Count > 0);
}
Sau đó, bạn có thể sử dụng một cái gì đó như thế này trong một hình thức:
private void button1_Click(object sender, EventArgs e)
{
/// get all of the controls in the form's hierarchy in a List<>
var controlList = GetControlHierarchy(this).ToList();
foreach (var control in controlList)
{
/// do something with this control
}
}
Lưu ý rằng .ToList()
sẽ đánh giá toàn bộ Enumerable ngay lập tức, mà loại bỏ bất kỳ lợi ích perf bạn có thể nhận được từ việc thực hiện coroutine.
Nguồn
2011-12-21 19:51:31
Câu hỏi của bạn không rõ ràng. Làm thế nào để bạn muốn 'có được' những điều khiển, nhìn thấy như thế nào bạn đã biết làm thế nào để lặp qua chúng? –
Bạn đã lặp lại các trẻ em với vòng lặp foreach. Ít nhất là trẻ em của This.Controls, có lẽ là hình thức. Nó không phải là nếu không rõ ràng những gì bạn có nghĩa là với "kiểm soát cha mẹ". –