In diesem Fall müssen alle enthaltenen Elemente nach Controls durchsucht werden. Das ist auf zwei Arten möglich: Iterativ, d.h. durch Zwischenspeichern aller enthaltenen Container-Elemente, oder rekursiv. Hier wird die rekursive Variante vorgestellt, die recht schnell programmiert ist. Sie gibt eine ArrayList aller enthaltenen Steuerelemente zurück, wobei auch das Startelement angegeben werden kann. Um alle auf einer Form enthaltenen Steuerelemente zu ermitteln, übergeben Sie einfach die Instanz des Formulars, z.B. mittels this.
Ob ein Control ein Container ist, lässt sich leicht über die Eigenschaft HasChildren ermitteln. Auf die enthaltenen Steuerelemente können Sie wieder über die Eigenschaft Controls zugreifen. Die eigentliche Methode ist recht kurz:
private ArrayList GetControls(Control ctrl) {
ArrayList arl = new ArrayList();
if (ctrl.HasChildren) {
foreach ( Control childCtrl in ctrl.Controls )
arl.AddRange(GetControls(childCtrl));
}
arl.AddRange(ctrl.Controls);
return arl;
}
Der Zugriff auf die Controls ist recht einfach. Angenommen, Sie wollten nur auf alle Textboxen zugreifen, die enthalten sind, dann können Sie das so tun:
foreach (object o in GetControls(this)) {
if (o is TextBox)
(o as TextBox).Text = "Hallo";
}