Vì vậy, có lẽ bạn muốn để có được tất cả các điều khiển bất cứ nơi nào trên biểu mẫu, không chỉ điều khiển cấp cao nhất. Cho rằng chúng tôi sẽ cần chức năng ít helper tiện dụng này để có được tất cả các điều khiển con, ở mọi cấp độ, cho một điều khiển đặc biệt:
public static IEnumerable<Control> GetAllControls(Control control)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(control);
while (stack.Any())
{
var next = stack.Pop();
yield return next;
foreach (Control child in next.Controls)
{
stack.Push(child);
}
}
}
(Hãy thoải mái để làm cho nó một phương pháp mở rộng nếu bạn nghĩ rằng bạn muốn sử dụng nó đủ)
Sau đó, chúng tôi chỉ có thể sử dụng OfType
vào kết quả đó để có được các điều khiển của một loại đặc biệt:.
var panels = GetAllControls(this).OfType<Panel>();
tôi đã chỉnh sửa tiêu đề của bạn. Vui lòng xem, "[Câu hỏi có nên bao gồm" thẻ "trong tiêu đề của họ không?] (Http://meta.stackexchange.com/questions/19190/)", trong đó sự đồng thuận là "không, họ không nên". –
Bạn đã xem xét việc sử dụng [foreach] (http://msdn.microsoft.com/en-us/library/ttw7t8t6 (v = vs.80) .aspx) loop? – Brian