Entwickler-Ecke
WinForms - ComboBoxen vergleichen
aloneboy - So 11.01.15 19:29
Titel: ComboBoxen vergleichen
Hallo zusammen,
ich brauche mal eure Hilfe und weiss einfach nicht wie ich das bewerkstelligen soll.
Es sind 5 ComboxBoxen auf einer Form platziert und mit den selben Einträgen gefüllt.
Nachdem die Auswahl der Comboboxeinträge stattgefunden hat, soll beim click eines Buttons geprüft werden ob evtl. Einträge doppelt ausgewählt wurden, das sollte verhindert werden, doch wie mache ich das?
Danke schon mal in vorab für Eure Hilfe
Th69 - So 11.01.15 19:37
Hallo,
das m.E. einfachste ist es, eine doppelte Schleife zu verwenden, und jede ComboBox mit einer anderen zu vergleichen (außer natürlich mit sich selbst). Dazu am besten die 5 Comboboxen in eine Liste packen.
aloneboy - So 11.01.15 19:44
öhmmm, ja
in eine Liste packen???
aloneboy - So 11.01.15 20:26
um ein Bsp. wäre ich sehr dankbar!
C# - So 11.01.15 21:10
Hallo,
Was Th69 meint ist folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| void Compare() { List<ComboBox> boxes = Controls.OfType<ComboBox>().ToList();
for (int i = 0; i < boxes.Count; i++) { for (int j = 0; j < boxes.Count; j++) { if (i == j) continue;
if (boxes[i].SelectedItem == boxes[j].SelectedItem) { } } } } |
aloneboy - So 11.01.15 21:30
Hallo und VIELEN Dank!!!!
Habe da noch eine Frage dazu, rein informativ
was ist wenn auf dem Formular mehr ComboBoxen sind als ausgewertet werden soll?
Und was ist, wenn bei einer Combobxo o. auch mehrere nichts ausgewählt wurde? dann funktioniert es mit SelectedItem nicht?
Gruß
Delete - Mo 12.01.15 03:52
- Nachträglich durch die Entwickler-Ecke gelöscht -
aloneboy - Mo 12.01.15 07:02
Ok, danke
C# - Mo 12.01.15 08:28
Hallo,
du kannst die Liste auch anhand bestimmter kriterien filtern.
Ändere diese Zeile
C#-Quelltext
1:
| List<ComboBox> boxes = Controls.OfType<ComboBox>().ToList(); |
wie folgt ab
C#-Quelltext
1:
| List<ComboBox> boxes = Controls.OfType<ComboBox>().Where(comboBox => comboBox.Name.Contains("ComboBox") || comboBox.Enabled).ToList(); |
In die Linq-Methode
Where(..) kannst du dann beliebige Bedingungen reinschreiben.
Wenn du noch ComboBoxen in Unterelementen (z.B. Panels) finden willst, musst du eine rekursive Suche machen.
Greenberet - Do 15.01.15 10:14
die Doppelte For Schleife ist hier leider nicht gerade sehr effizient :P
j müsste mit i+1 Anfangen:
- Boxen mit j<i wurden ja bereits schon überprüft, also wodurch die Arbeit noch einmal machen?
- if (i == j) continue; fällt damit weg
Alternativ könntest du auch eine foreach Schleife über die ComboBoxen machen und das Ergebnis in einer Liste speichern.
Vor dem Speichern überprüfst du ob das Item schon existiert und falls ja handelst du eben dementsprechend.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!