Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Viele Comboboxen mit einem Event abfangen?
metacircle
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Stuttgart

Themenstarter:

Viele Comboboxen mit einem Event abfangen?

beantworten | zitieren | melden

Hallo,

wie aus meinem anderen Thread Grafische Objekte auf GUI verbinden: Ansatz gesucht bekannt habe ich eine Oberfläche entwickelt mit der man Logikbausteine verknüpfen kann.

Meine nächste Aufgabe ist es, eine Simulation der aufgebauten Logik zu realisieren. Dazu habe ich mir folgendes Fenster (siehe Anhang) entwickelt.

Eine Logik wie ich die Simulation realisiere schwirrt mit auch schon im Kopf rum, Problem an der Sache wäre aktuell folgendes: Sobald sich ein Eingang ändert, muss die Simulation neu angestoßen werden, dazu müsste ich mit meinem Fenster 48 Events abfangen, von jeder CheckBox einzeln, das finde ich sehr aufwändig und umständlich.

Kennt jemand eine einfachere Idee wie ich Änderungen an den Checkboxen eventuell global, in nur einem Event abfangen kann?

Grüße
Attachments
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.114

beantworten | zitieren | melden

Indem du dem OnChanged immer die selbe Methode zuweist. Entweder im Designer, da stehen alle passenden Methoden in der Combobox beim Event, oder du machst das per Code. Dazu kannst du im Designercode nachschauen wie das genau aussieht.
In der Methode kannst du dann ahnand des "sender" entscheiden, welche Combobox das Event aufgerufen hat.
private Nachricht | Beiträge des Benutzers
creutzi73
myCSharp.de - Member



Dabei seit:
Beiträge: 9

beantworten | zitieren | melden

Keine Ahnung ob das eleganter geht aber ich mach so etwas gerne auf diese
Art: (ungeprüftes Beispiel)



        private void Form1_Shown(object sender, EventArgs e)
        {            
            foreach (Control ctrl in groupBox1.Controls)
            { 
                if (ctrl is CheckBox)
                    ((CheckBox)ctrl).CheckedChanged += new EventHandler(checkBox_CheckedChanged);
            }
        }
                        
        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {
            MessageBox.Show(((CheckBox)sender).Text);
        }
Gesegnet seien jene, die nichts zu sagen
haben und trotzdem den Mund halten (Oskar Wilde)
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Genau so würde ich es auch machen. Und beim Initialisieren wird ich die Tag Property der Checkbox nutzen um dir zu merken welche Checkbox es ist, sodass du in der Methode die dem Event zugeordnet ist weist welche Checkbox verändert wurde.
Again what learned...
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

"Tag" brauchst du nicht zu setzen. Die CheckBox steht im sender des Events.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Das ist schon klar, aber um zu wissen das dass die CheckBox 4 war sollte er das Tag Property verwenden oder von Ableiten und sich was eigenes zu basteln.
Again what learned...
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.114

beantworten | zitieren | melden

Kommt drauf an was er dann damit machen will.
Nur um irgendwas anzustoßen das dann sowieso alle Werte neu einliest, dazu braucht man gar keine weitere Info. Und wenns ein größeres if sein soll, dazu tuts dann ja der sender auch.
Vielleicht bekommen wir ja noch Info was es genau werden soll.
private Nachricht | Beiträge des Benutzers
creutzi73
myCSharp.de - Member



Dabei seit:
Beiträge: 9

beantworten | zitieren | melden

Hab mal bissel rumgespielt...

Mit LINQ:


(from Control ctrl in groupBox1.Controls
where ctrl is CheckBox
select (CheckBox)ctrl)
.ToList().ForEach(c => c.CheckedChanged += new EventHandler(checkBox_CheckedChanged));
Gesegnet seien jene, die nichts zu sagen
haben und trotzdem den Mund halten (Oskar Wilde)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo creutzi73,

ich bin ja ein Fan von Linq, aber das geht noch schöner, kürzer und übersichtlicher:

foreach (CheckBox cbx in groupBox1.Controls.OfType <CheckBox> ()) {
   cbx.CheckedChanged += checkBox_CheckedChanged;
}

herbivore
private Nachricht | Beiträge des Benutzers
creutzi73
myCSharp.de - Member



Dabei seit:
Beiträge: 9

beantworten | zitieren | melden

Cool. 8)
Sehe gerade, dass diese Erweiterungsmethode seit 3.5 besteht.

Dankö
Gesegnet seien jene, die nichts zu sagen
haben und trotzdem den Mund halten (Oskar Wilde)
private Nachricht | Beiträge des Benutzers