我正在尋找一個代碼示例如何獲得父級控制的所有子級。如何獲得父母控制的所有孩子?
我不知道它是怎麼做到的。
foreach (Control control in Controls)
{
if (control.HasChildren)
{
??
}
}
我正在尋找一個代碼示例如何獲得父級控制的所有子級。如何獲得父母控制的所有孩子?
我不知道它是怎麼做到的。
foreach (Control control in Controls)
{
if (control.HasChildren)
{
??
}
}
如果只想眼前的孩子,使用
...
var children = control.Controls.OfType<Control>();
...
如果你想從層次結構(即,一切都在樹一定的控制之下),使用的所有控件:
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);
}
然後,你可以使用類似這樣的形式:
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
}
}
注意.ToList()
會立即評估整個Enumerable,從而消除了從協程實現中可能獲得的性能優勢。
控件有一個MyControl.Controls
集合,你可以做一個foreach
。
每個控件也有一個Parent
屬性,它給你父控件。
如果您需要降低未知數量的級別,則可以編寫遞歸方法。
也許這可能對別人有用:
public void GetControlsCollection(Control root,ref List<Control> AllControls, Func<Control,Control> filter)
{
foreach (Control child in root.Controls)
{
var childFiltered = filter(child);
if (childFiltered != null) AllControls.Add(child);
if (child.HasControls()) GetControlsCollection(child, ref AllControls, filter);
}
}
這是遞歸函數來獲取控件的集合與(按類型expample)底肥過濾器的可能性。而例如:
List<Control> resultControlList = new List<Control>();
GetControlsCollection(rootControl, ref resultControlList, new Func<Control,Control>(ctr => (ctr is DropDownList)? ctr:null));
它將返回rootControl所有DropDownLists和他所有的孩子
可能過於複雜,但使用LINQ和從上面的一些想法/其它地方:
public static IEnumerable<Control> GetAllChildren(this Control root) {
var q = new Queue<Control>(root.Controls.Cast<Control>());
while (q.Any()) {
var next = q.Dequeue();
next.Controls.Cast<Control>().ToList().ForEach(q.Enqueue);
yield return next;
}
}
你的問題不清楚。你想如何「獲得」這些控件,看看你已經知道如何遍歷它們? – 2011-12-21 19:51:44
您已經在使用foreach循環迭代子項。至少這個孩子。控制,大概是形式。 「父母控制」的含義並不明確。 – 2011-12-21 19:54:01