Iterieren durch alle Controls einer Form

09/08/2009 - 20:58 von Jan Thordsen | Report spam
Moin

ich hab mal ne Frage.

Ich möchte durch alle Controls einer Form iterieren, um diverse Properties
(Captions, MaxLength, Tooltips) anhand von Vorgaben einer XML Datei
einzustellen (die Methode sollte generisch sein, da ich sie bei diversen
Forms einsetzen möchte).

Dazu verwende ich folgende Methode:

private Control[] GetChildControls(Control ctrl)
{
ArrayList controls = new ArrayList();
foreach (Control c in ctrl.Controls)
{
// add this control and all its nested controls
controls.Add(c);
controls.AddRange(GetChildControls(c));
}
// return the result as a Control array
return (Control[]) controls.ToArray(typeof(Control));
}

aufgerufen im Konstruktor der Form

Control[] controls = this.GetChildControls(this);

Das Problem ist, dass diverse Controlarten nicht in der Auflistung
auftauchen. Konkret geht es um Steuerelemente von Developer Express
(BarManager und BarButtonItems). Ich hab nicht so viel AHnung von OOP, aber
ich denke, dass diese Controls nicht von derselben Basisklasse ableiten.

Jetzt meine konkrete Frage. Gibt es eine programmatische Möglichkeit,
wirklcih ALLE Controls einer Form in ein Array zu packen, so dass ich ihre
Eigenschaften zur Laufzeit manipulieren kann?

Danke im Voraus und schöne Woche

Jan
 

Lesen sie die antworten

#1 Arne Janning
10/08/2009 - 02:49 | Warnen spam
Lieber Jan,

"Jan Thordsen" wrote
Ich möchte durch alle Controls einer Form iterieren



[...]

Das Problem ist, dass diverse Controlarten nicht in der Auflistung
auftauchen. Konkret geht es um Steuerelemente von Developer Express
(BarManager und BarButtonItems).



In der Tat erben die nicht von System.Windows.Forms.Control, sondern von
System.ComponentModel.Component:
http://www.devexpress.com/Help/?doc...velup=true

Du müsstest also eine zweite Schleife schreiben:

foreach (IComponent component in this.components.Components)
{
controls.Add(component);
}

Die Variable "components" wird vom Windows.Forms-Designer erstellt.

Ich habe jetzt kein DevExpress zur Hand, wenn ich jedoch ein NotifyIcon auf
ein Formular ziehe (welches ebenfalls von Component und nicht von Control
erbt), dann tut das. Gut möglich, daß das mit DevExpress-Komponenten genauso
tut.

Herzliche Grüße

Arne

Ähnliche fragen