Autor Beitrag
BFK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 04.12.08 04:22 
Hallo,
habe ein Problem und zwar habe eine ComboBox mit folgende Items
(1 und 2). Wenn man 1 auswählt sol was passieren, wenn man 2 auswählen soll was anderes passieren, hier der Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox obox = new ComboBox();
            if (comboBox1.SelectedItem.Equals("1"))
            { 
                obox.Location = new Point(4287);
                Controls.Add(obox);
                obox.Items.Add("a");
                obox.Items.Add("b");
                obox.Items.Add("c");
                obox.SelectedIndexChanged += new EventHandler(obox_SelectedIndexChanged);
            }
            else if (comboBox1.SelectedItem.Equals("2"))
            {
                Controls.Remove(obox); // funktioneirt nicht..!
                
            }
        }

        void obox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            if (cb.SelectedItem.Equals("a"))
            {

                ComboBox pox = new ComboBox();
                pox.Location = new Point(42107);
                Controls.Add(pox);
                pox.Items.Add("x");
                pox.Items.Add("y");
                pox.Items.Add("z");
            }
        }


Wenn man jetzt die "2" von ComboBox auswählt soll die zweite ComboBox, also die "obox" verschwinden, deshalb ja auch Controls.Remevo(obox), aber das funktioneirt nicht.....wieso..?

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4808
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 04.12.08 10:58 
Und wieder einer der typischen Anfängerfehler.

Du erzeugst jeweils mittels "new ComboBox()" eine neue Instanz, d.h. nur weil die Variable 'obox' heißt, ist aber deren Wert nicht gleich (beim nächsten Aufruf der Methode).
Lösung: Du mußt dir in einer Klassenmember-Variablen diese Instanz merken und dann wieder abfragen - dann klappt auch das Löschen.

Welche Bücher oder Tutorials benutzt du, da ich diesen Fehler immer wieder in den Foren entdecke?
BFK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 04.12.08 20:20 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Und wieder einer der typischen Anfängerfehler.

Du erzeugst jeweils mittels "new ComboBox()" eine neue Instanz, d.h. nur weil die Variable 'obox' heißt, ist aber deren Wert nicht gleich (beim nächsten Aufruf der Methode).
Lösung: Du mußt dir in einer Klassenmember-Variablen diese Instanz merken und dann wieder abfragen - dann klappt auch das Löschen.


Danke für deine Antwort..!
Verstehe aber nicht ganz wie ich die in einer Klassenmember-Variable speichern kann. könntest du mir das näher erklären..?
BFK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 04.12.08 23:19 
Habe das hier (msdn.microsoft.com/d...a984275(VS.71).aspx) bei msdn gefunde, da word es auch ausfürlich erklärt, ka wieso ich das nicht schon früher gefunden habe, da ich ja gesucht hab.
Na egal habe verscuht mein Problem mit Hilfe dieses Beispiles umzuschreiben, daher der folgende Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox obox = new ComboBox();
            if (comboBox1.SelectedItem.Equals("1"))
            { 
                //ComboBox obox = new ComboBox();
                obox.Location = new Point(4287);
                Controls.Add(obox);
                obox.Items.Add("a");
                obox.Items.Add("b");
                obox.Items.Add("c");
                obox.SelectedIndexChanged += new EventHandler(obox_SelectedIndexChanged);
            }
            if (comboBox1.SelectedItem.Equals("2"))
            {

                if (Controls.Contains(obox))
                {
                    obox.SelectedIndexChanged -= new System.EventHandler(obox_SelectedIndexChanged);
                    Controls.Remove(obox);
                    obox.Dispose();
                }
                
            }
        }

Leider funktioniert es immer noch nicht.
Und mich würde auch interessieren, wieso man diese Zeile scheiben muss:
ausblenden C#-Quelltext
1:
obox.SelectedIndexChanged -= new System.EventHandler(obox_SelectedIndexChanged);					

Im Beispeil auf der MSDN Seite ist das mit ähnlich für ein Button geschrieben(OnClick).
Ich verstehe ja wieso man das umgekehrte schreiben muss, das was bei mir im ersten if-Block ist, aber wieso das gleiche nochmal mit -= ..?
Es soll ja nichts passieren, will es ja nur löschen..!
Die Zeile
ausblenden C#-Quelltext
1:
obox.Dispose();					

habe ich verstanden, wird ja da auch gut erklärt..!