checkBox1_CheckedChanged gibt wert doppelt zurück?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von DaNeubi.

    checkBox1_CheckedChanged gibt wert doppelt zurück?

    Hey Leute,

    ich habe folgendes Problem.

    Wenn ich einen neuen EventHandler auf Checkbox1.checkedChanged setzt und diesen dann ausführe macht der das 2 mal.

    C#-Quellcode

    1. checkBox1.CheckedChanged += new EventHandler (checkBox1_CheckedChanged);


    C#-Quellcode

    1. private void checkBox1_CheckedChanged(object sender, EventArgs e)
    2. {
    3. switch1();
    4. }
    5. private void switch1()
    6. {
    7. if (checkBox1.Checked == true)
    8. {
    9. comboBox1.Items.Add("Kreis");
    10. comboBox1.Items.Add("Dreieck");
    11. comboBox1.Items.Add("Viereck");
    12. comboBox1.Items.Add("Fünfeck");
    13. comboBox1.Items.Add("N-Gon");
    14. comboBox1.Items.Add("Pyramide (schief)");
    15. comboBox1.Items.Add("Schräg abgeschnittener Kreiszylinder");
    16. comboBox1.Items.Add("Liegender Kreiszylinder (Tank)");
    17. listBox1.Items.Add("Hinzugefügt");
    18. }
    19. else if (checkBox1.Checked == false)
    20. {
    21. comboBox1.Items.Remove("Kreis");
    22. comboBox1.Items.Remove("Dreieck");
    23. comboBox1.Items.Remove("Viereck");
    24. comboBox1.Items.Remove("Fünfeck");
    25. comboBox1.Items.Remove("N-Gon");
    26. comboBox1.Items.Remove("Pyramide (schief)");
    27. comboBox1.Items.Remove("Schräg abgeschnittener Kreiszylinder");
    28. comboBox1.Items.Remove("Liegender Kreiszylinder (Tank)");
    29. listBox1.Items.Add("Entfernt");
    30. }
    31. else
    32. {
    33. listBox1.Items.Add("Hier ist leider ein Fehler aufgetreten");
    34. }
    35. }


    Er schreibt mir 2 mal das "Entfernen" in die Listbox1 und auch in der combobox1 wird alles 2 mal angezeigt.

    Wisst ihr was ich da vergessen hab bzw falsch gemacht hab?

    Vielen Dank im vorraus.

    DaNeubi

    C#-Quellcode

    1. if (checkBox1.Checked == true)
    2. {
    3. }
    4. else if(checkBox1.Checked == false)
    5. {
    6. }


    Besser:

    C#-Quellcode

    1. if (checkBox1.Checked)
    2. {
    3. }
    4. else
    5. {
    6. }


    Und generell kann man das mit Ausrufezeichen abkürzen. (checkBox1.Checked == false) wird zur (!checkBox1.Checked).
    Und ein bool kann nur true oder false sein, nichts anderes. Also ist else if unnötig.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    DaNeubi schrieb:

    macht der das 2 mal.
    Der Handler wird aufgerufen, wenn die CB gecheckt wird und wenn sie ge-un-checkt wird. Meinst Du dies oder hast Du noch einen weiteren Effekt?
    -----

    C#-Quellcode

    1. else
    2. {
    3. listBox1.Items.Add("Hier ist leider ein Fehler aufgetreten");
    4. }
    Hast Du ein Three-State-Boolean? :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich könnte mir vorstellen, dass du den Event-Handler zweimal hinzugefügt hast(evtl. einmal im Designer und einmal im Code manuell)
    Außerdem ist deine If-Anweisung etwas unsinnig. Checked ist eine Eigenschaft vom typ bool -> true/false if überprüft einen bool Wert ob dieser entweder true oder false ist. Durch dein == true passiert also folgendes.
    checked = true -> true == true = true, also warum den Vergleich überhaupt machen, denn wenn checked true dann ist das endergebnis ebenfalls true...
    Zusätzlich ist kein elseif nötig, denn wenn ein boolescher Wert nicht true ist, dann kann er nur noch false sein, einen anderen Wert kann es nicht annehmen. -> direkt else benutzen(dein aktuelles else ist blödsinn, da dieser Fall niemals eintreten kann).
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    C#-Quellcode

    1. private void switch1()
    2. {
    3. if (checkBox1.Checked)
    4. {
    5. comboBox1.Items.Add("Kreis");
    6. comboBox1.Items.Add("Dreieck");
    7. comboBox1.Items.Add("Viereck");
    8. comboBox1.Items.Add("Fünfeck");
    9. comboBox1.Items.Add("N-Gon");
    10. comboBox1.Items.Add("Pyramide (schief)");
    11. comboBox1.Items.Add("Schräg abgeschnittener Kreiszylinder");
    12. comboBox1.Items.Add("Liegender Kreiszylinder (Tank)");
    13. listBox1.Items.Add("Hinzugefügt");
    14. }
    15. else
    16. {
    17. comboBox1.Items.Remove("Kreis");
    18. comboBox1.Items.Remove("Dreieck");
    19. comboBox1.Items.Remove("Viereck");
    20. comboBox1.Items.Remove("Fünfeck");
    21. comboBox1.Items.Remove("N-Gon");
    22. comboBox1.Items.Remove("Pyramide (schief)");
    23. comboBox1.Items.Remove("Schräg abgeschnittener Kreiszylinder");
    24. comboBox1.Items.Remove("Liegender Kreiszylinder (Tank)");
    25. listBox1.Items.Add("Entfernt");
    26. }


    So habe ich dann immer noch das ganze zweimal stehen...



    Nein einen Three-State-Bool brauche ich eigentlich nicht.

    Und im Designer hab ich da auch nichts definiert.

    DaNeubi schrieb:

    Und im Designer hab ich da auch nichts definiert.

    Sicher, dass Du nicht über den Designer den hinzugefügt hast? Kannst ja mal nachschauen, ob es abonniert ist.

    Und lade Fotos bitte über die foreninterne Anhangsfunktion hoch. Dann muss nicht jeder die Hoster besuchen, was auch nicht unbedingt jeder möchte.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Definiert nichts, das macht der automatisch, wenn Du da doppelt draufklickst. Schau halt mal im Eigenschaftsfenster unter den Events nach, ob es eingetragen ist.

    Und nein, ist nur verlinkt. Ich meine im Beitrag unten unter "Dateienhänge".

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    DaNeubi schrieb:

    Ich wüsste nicht
    Mach mal einen Doppelklick im Designer auf die Checkbox.
    Wenn Du da in Deiner Funktion landest, musst Du das Handler-Hinzufügen im Code wefnehmen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vollzitat entfernt. ~Trade

    Und auf einmal mat alles Sinn :D

    Danke dir

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()