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
Ereignisbehandlung zu einem Array aus Objeken
ichwars
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Deutschland

Themenstarter:

Ereignisbehandlung zu einem Array aus Objeken

beantworten | zitieren | melden

Hallo liebe Forumgemeinde,

ich habe ein Array aus Comboboxen erstellt. Jetzt möchte ich natürlich auch das Ereignis SelectedIndexChanged zu jedem Element der im Array enthaltenen Comboboxen auswerten.
Wie genau funktioniert das? Brauche ich jetzt auch ein Array aus Ereignisbehandlungsmethoden (hab ich probiert)?
Oder ist es möglich, eine Methode zu erstellen, bei der dann nur der Index übergeben wird?
Bei Änderung einer der Comboboxen im Array Kurve_Extruder[] wird in die Ereignisbehandlungsmethode "Kurve_Extruder_SelectedIndexChanged(object sender, EventArgs e)" s.u. gesprungen, doch woher weiß ich jetzt, welches Array-Element das Ereignis ausgelöst hat?
Die eine Zeile in der Methode erzeugt übrigens eine NullReferenceException...

Hier mal der Code...


 public Form1()
        {
            InitializeComponent();
            ComboBox[] Kurve_Extruder = new ComboBox[8];
            ComboBox[] Kurve_Parameter = new ComboBox[8];
            ComboBox[] Kurve_Soll_Ist = new ComboBox[8];
            ComboBox[] Kurve_Element = new ComboBox[8];

           
            for (int i = 0; i < 8; i++)
            {
                Kurve_Extruder[i] = new ComboBox();    
                Kurve_Parameter[i] = new ComboBox();
                Kurve_Soll_Ist[i] = new ComboBox();
                Kurve_Element[i] = new ComboBox();
                Kurve_Extruder[i].Location = new Point(85, 244 + i * 28);
                Kurve_Parameter[i].Location = new Point(222, 244 + i * 28);
                Kurve_Soll_Ist[i].Location = new Point(367, 244 + i * 28);
                Kurve_Element[i].Location = new Point(504, 244 + i * 28);
                Controls.Add(Kurve_Extruder[i]);
                Controls.Add(Kurve_Parameter[i]);
                Controls.Add(Kurve_Soll_Ist[i]);
                Controls.Add(Kurve_Element[i]);
                string[] Liste = new string[] {"Bitte wählen...", "Extruder K90", "Extruder K70", "Extruder K35", "Glättwalzen", "Ereignisse", "Dosierung"};
                Kurve_Extruder[i].Items.AddRange(Liste);
                Kurve_Extruder[i].Text = "Bitte wählen...";

                Kurve_Extruder[i].SelectedIndexChanged += new System.EventHandler(Kurve_Extruder_SelectedIndexChanged);
            }
        }

        private void Kurve_Extruder_SelectedIndexChanged(object sender, EventArgs e)
        {
            label1.Text = Kurve_Extruder.SelectedItem.ToString();
        }
Vielen Dank im Voraus!
Gruß Heiko
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo ichwars,

bei den Event-Handler kriegst du meistens einen Sender mit.
D.h. das ist das Objekt welches das Event ausgelöst hat.

In deinem Fall ist der Sender die ComboBox welche das Event ausgelöst hat.
Du kannst somit das Event all deiner ComboBoxen auf die eine Methode registrieren und kriegst über den Sender raus bei wen sich was geändert hat.

Grüße
Michael
private Nachricht | Beiträge des Benutzers
ichwars
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Deutschland

Themenstarter:

beantworten | zitieren | melden

Hallo Michael,

danke für die schnelle Antwort. Hast du vielleicht ein Bsp. oder einen Link dazu?

Gruß Heiko
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo,

der Sender ist ein Object.
Deshalb musst du es erst noch auf ComboBox casten um darauf zugreifen zu können.
Also so


var cmb = (ComboBox)sender;
//jetzt kannst du die ComboBox verwenden

PS: Bitte beachte [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1
Ein bisschen googlen und Grundwissen wie man Typen castet setzen wir hier voraus. Vielen Dank!

Grüße
Michael
private Nachricht | Beiträge des Benutzers
ichwars
myCSharp.de - Member



Dabei seit:
Beiträge: 3
Herkunft: Deutschland

Themenstarter:

beantworten | zitieren | melden

Hallo Michael,

ich wußte nicht, dass ich den Sender erst auf die Combobox casten muß... zumal er ja von der Combobox selbst aufgerufen wird. Aber wenn der Sender selbst ein Objekt für sich ist, ist das klar.

Besten Dank!
Gruß Heiko
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ichwars,

sender ist kein "Objekt für sich", sondern lediglich ein Parameter, also die Variable, die bei der Parameterübergabe auf das Objekt verweist. Und dieses Objekt ist die ComboBox, die das Event ausgelöst hat. Nichts anderes und schon gar kein anderes Objekt. Da der Parameter jedoch vom allgemeinsten verfügbaren Typ - nämlich Object - ist, muss man erst casten, um darüber auf die Member der ComboBox zugreifen zu können. Das Casten ändert an dem Typ des Objekts und an dem Objekt selbst überhaupt nichts, sondern nur daran, welche Zugriffe auf die Member des Objekts möglich sind.

Den Typ der Variable nennt man den statische Typ und den Typ des Objekts, auf das die Variable verweist, nennt man dynamischen Typ. Trenne gedanklich immer klar zwischen Objekten und den Variablen, die auf die Objekte verweisen.

Aber das sind wirklich Grundlagen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
Zitat
Ein bisschen [...] Grundwissen wie man Typen castet setzen wir hier voraus.
Oder alternativ zumindest den Willen, das Grundwissen bei Bedarf nachzuschlagen, z.B. in der FAQ [Tipp] Casten aber richtig: () / is / as. Beachte daher auch Punkt 1.1.


herbivore
private Nachricht | Beiträge des Benutzers