我想從任何ControlCollection獲取所有相應類型的控件。重要的是要知道,我將一些元數據存儲在標記控件的屬性中。 這裏是我的發現返回的控制相應的T型方法:如何從Panel中獲取所有按鈕(或任何其他類型)?
public static void GetAllChildControls<T>(Control.ControlCollection root, List<T> list) where T : Control {
if (list == null)
list = new List<T>();
foreach (Control ctl in root) {
if (ctl.GetType() == typeof(T))
list.Add((T)ctl);
if (ctl.Controls.Count > 0)
GetAllChildControls(ctl.Controls, list);
}
}
爲什麼我寫這篇文章的唯一原因是因爲我不爲標籤找回價值。在VS2008中,(T)ctl沒有可評估的標籤(以及ContextMenu)。它顯示「無法評估表達式」。否則,所有其他的事情似乎是確定的。
UPDATE
,我要問標籤屬性的代碼:
...
List<Button> list = null;
Helper.GetAllChildControls<Button>(master.ChildControls, list);
if (list != null)
foreach (CounterItem c in counters) {
Button b = list.Single(e => e.Tag.Equals(c.Name));
^^^
if (b == null)
continue;
b.SetCounter(c.Value);
}
...
後,你用做標記屬性 –
@ E-蝙蝠的代碼,後已更新 – Franziee
什麼是行爲/錯誤你得到了什麼? – cdkMoose