Entwickler-Ecke

WinForms - Combobox, CheckBox in Auflistung oder als Objekte definieren


ots_sharp - So 06.05.12 13:03
Titel: Combobox, CheckBox in Auflistung oder als Objekte definieren
Hallo,

in einer Maske habe ich verschiedene Objekte (Comboboxen, CheckBoxen) die ich gezielt ansprechen möchte. Diese Objekte möchte ich dann in mehreren Methoden verwenden. Dazu würde ich die Objekte in eine Methode schreiben und diese bei Bedarf aufrufen. Wie kann ich diese an eine Methode übergeben und wie kann ich diese Liste durchlaufen?
Ein Array funktioniert in diesem Fall nicht, da sich unterschiedliche Objekte befinden.
Bei VB können die Objekte als Object angesprochen werden. Gibt es das auch in C#?


C#-Quelltext
1:
ComboBox[] BoxArray = new ComboBox[] { this.cbox1, this.cbox2};                    


Auflistung der Objekte


C#-Quelltext
1:
 this.cbox1, this.cbox2, this ckhbox1,…;                    


Gruß Stefan


Th69 - So 06.05.12 13:33

Hallo,

alle GUI-Komponenten haben die Basisklasse Control, so daß du also davon ein Array erzeugen kannst:

C#-Quelltext
1:
Control[] controls = new Control[] { this.cbox1, this.cbox2, this.ckhbox1 /*,...*/};                    

Dies ist besser als Object zu verwenden, da du dann schon auf die allgemeingültigen Eigenschaften wie Name, Text, Size etc. zugreifen kannst, ohne explizit 'casten' zu müssen.


ots_sharp - So 06.05.12 13:55

Vielen Dank für die Rückantwort. Und wie greife ich auch das SelectedItem einer ComboBox zu?


Th69 - So 06.05.12 14:56

Du meinst innerhalb der Controls-Schleife?

Zuerst überprüfen, ob es sich um eine ComboBox handelt, und dann darauf zugreifen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
foreach(Control control in controls)
{
  ComboBox cb = control as ComboBox; // versuche nach ComboBox zu casten
  if (cb != null// wenn ja, dann cb != null, ansonsten null
  {
    object item = cb.SelectedItem;
    // ...
  }
}

Brauchst du denn wirklich alle verschiedenen Controls in dem Array, denn so müßtest du jeden Control-Type einzeln überprüfen?


ots_sharp - So 06.05.12 15:00

Ja, ich möchte den Boxen den Index zuweisen und so die Boxen zur Laufzeit mit Werten einstellen.