Hallo, folgendes Szenario zu dem mir keine Lösung einfällt. Ich hab eine Windowsformsanwendung die einige NumericUpDown und DomainUpDown umfasst. Die sind zum Beispiel auf dem Tab1 im (TabControl) so angeordnet: Numeric0 Numeric1 Domain0 Numeric2 Domain1 Die Werte die jetz da drinnen stehen sollen in ein Array rein.Folgende schreib weise wollte ich vermeiden(weil irgendwie zu aufwändig): Array[0]=Numeric0.Value; Array[1]=Numeric1.Value; Array[2]=Domain0.SelectedIndex; Array[3]=Numeric2.Value; usw... Gibt es da nicht eine einfachere Lösung mit Foreach oder so. Zum Beispiel so Object[] Array=new Array={Numeric0,Numeric1,Domain0,Numeric...} Wobei bei diesem Ansatz der unterschiedliche Typ(NumericUpDown,DomainUpDown) ein Problem ist
Das Problem läßt sich recht einfach lösen:
1 | Tabcontrol foo; |
2 | ...
|
3 | foreach ( Control ctrl in foo.controls ) { |
4 | ...
|
5 | }
|
Gruß Markus
@Markus das mit der foreach Schleife haut hin. Nur wird so über alles iteriert also auch die Labels die sich in Tabcontrol befinden. Nach welcher Reihenfolge wird den dann auf die Controls zugegriffen gibst da irgendwo einen Index. Sonst wird mein Array in der Schleife Querbeet belegt.
Mir fallen da spontan drei Möglichkeiten ein: 1. Missbrauche den TabIndex deiner Controls um die Reihenfolge festzulegen. 2. Jedes Control hat ein Tag-Property (Typ Object). Da kannst Du eine beliebige Information dranhängen. Z.B. ein Int32-Objekt, das die Reihenfolge Deiner Controls für Deine Verarbeitung wiederspiegelt. Die Lösung ist schon etwas besser als den TabIndex zu missbrauchen. 3. Definiere eine Attribut-Klasse, mit der die relevanten Controls "markiert" werden. Diese Attribut-Klasse hat ein Index-Property mit dem die Verarbeitungsreihenfolge definiert wird. Es werden dann zur Laufzeit über Reflection alle mit dem Attribut markierten Controls aufgesammelt, sortiert und dann verarbeitet. Die dritte Lösung ist zugegebenermaßen etwas komplizierter als die ersten beiden, hat aber den Vorteil, daß Du keine Abhängigkeiten zu Daten hast, die für andere Zwecke verwendet werden (können) und Dir bei Änderungen dann vielleicht Deine Verarbeitung zerhauen. Der TabIndex z.B. definiert ja die Reihenfolge der Controls beim "Durchtabben" durch eine Form. Gruß Markus
In der foreach-Schleife kannst du dann sogar folgendes machen:
1 | foreach(Control ctl in foo.Controls) |
2 | {
|
3 | if(ctl is NumericUpDown) |
4 | {
|
5 | array[...] = ((NumericUpDown)ctl).Value; |
6 | }
|
7 | else if(ctl is DomainUpDown) |
8 | {
|
9 | array[...] = ((DomainUpDown)ctl).SelectedIndex; |
10 | }
|
11 | }
|
Du kannst dir auch selbst zwei Klassen bauen, basierend auf den Numeric- bzw. Domain-Klassen, welche eine zusätzliche Eigenschaft Index erhalten.
Habs jetzt so gemacht SteuerElm = new Control[12] { Hier sind alle Controls drin die mich intersieren}; Dann der Zugriff: foreach (Control ctrl in SteuerElm) { System.Type typ = ctrl.GetType(); if (typ == typeof(System.Windows.Forms.NumericUpDown)) { } else if (typ==typeof(System.Windows.Forms.DomainUpDown)) { } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.