Entwickler-Ecke
WinForms - Control.Remove() geht nicht...???
BFK - Do 04.12.08 04:22
Titel: Control.Remove() geht nicht...???
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:
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(42, 87); 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); } }
void obox_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; if (cb.SelectedItem.Equals("a")) {
ComboBox pox = new ComboBox(); pox.Location = new Point(42, 107); 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
Kha: C#-Tags hinzugefügt
Th69 - 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 - Do 04.12.08 20:20
Th69 hat folgendes geschrieben : |
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 - Do 04.12.08 23:19
Habe das hier (
http://msdn.microsoft.com/de-de/library/aa984275(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:
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")) { obox.Location = new Point(42, 87); 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:
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
habe ich verstanden, wird ja da auch gut erklärt..!
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!