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)
                    {
                        // Gleiche Einträge wurden gewählt
                    }
                }
            }
        }


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:


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.