Bei änderung des Checkbox statuses form aktuallisieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    bigbase schrieb:

    Ihr habt ja nichtmal ahnung was ich damit gemacht habe

    Woher sollen wir das auch wissen?

    Weiter oben gab es ja schon die Lösung.

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    2. 'die Abfrage setzen
    3. If CheckBox1.Checked = False Then
    4. CheckBox2.Enabled = False
    5. CheckBox3.Enabled = False
    6. CheckBox4.Enabled = False
    7. Else
    8. CheckBox2.Enabled = True
    9. CheckBox3.Enabled = True
    10. CheckBox4.Enabled = True
    11. End If
    12. 'Die Boxen aktualisieren
    13. CheckBox2.Refresh()
    14. CheckBox3.Refresh()
    15. CheckBox4.Refresh()
    16. End Sub
    17. End Class

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

    bigbase schrieb:

    wer keine ahnung hat sollte halt still sein
    sollte nur jemand sagen, der eine vollständige und reproduzierbare Problembeschreibung postet.
    Ansonsten: Netikette.
    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 muss hier leider nochmal nachlegen

    Die Checkboxen funktionieren zwar aber nicht perfekt


    Alsobeispiel stellung

    Checkbox4 [ ] Generiere Passwort aus wenn ich das anklicke werden Checkboxen 1,2,3 Von Enabled = False auf Enabled = True gestellt
    Checkbox1 [ ] Aus Buchstaben
    Checkbox2 [ ] Aus Zahlen
    Checkbox3 [ ] Aus Sonderzeichen

    Da der Staus aus der chekcbox trozdem ausgelesen werden kann habe ich es so geschrieben das wenn man den hacken aus checkbox 4 raus nimmt der status in chekcbox 1-3 gelöscht wird

    VB.NET-Quellcode

    1. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    2. If CheckBox4.Checked Then
    3. CheckBox1.Enabled = True
    4. CheckBox2.Enabled = True
    5. CheckBox3.Enabled = True
    6. Else
    7. CheckBox1.Enabled = False
    8. CheckBox2.Enabled = False
    9. CheckBox3.Enabled = False
    10. End If
    11. If CheckBox4.Checked = False Then
    12. CheckBox1.Checked = False
    13. CheckBox2.Checked = False
    14. CheckBox3.Checked = False
    15. End If
    16. End Sub


    Nun ist es so wen ich jetzt alle checkboxen aktiviere dies in den settings speichere Als Bolean und Die form neu starte dan sind alle checkboxen aktiv klicke ich nun aber in checkbox 1 geht der hacken nicht raus sondern löscht nur den checkbox status von checkbox 2-4


    Wie schaffe ich es das der hacken ruas geht anstat sich aktualliesiert ich hoffe ich habe das gescheit erklärt
    Welcher Code wird ausgeführt, wenn checkbox1ausgelöst wird? Welche Events laufen da? CheckedChanged, Click etc.?

    Dein obiger Code zeigt dies nicht.

    Evtl. mal den Debugger inkl. Breakpoints nutzen?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @bigbase Ich denke einfach mal, Du veränderst Enabled und fragst Checked ab.
    Welche dieser Properties hast Du in die Settings gepackt?
    Probiere mal, nur Enabled automatisch zu verändern, aber beide Properties Enabled und Checked abzufragen.
    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!
    @bigbase: Leider nicht ganz genau erklärt. Dein Code im letzten Post spricht von CheckBox4 als Haupt-CheckBox, der die anderen untergeordnet sind. Unter dem Code steht, dass CheckBox 1 eine Auswirkung auf die anderen haben soll. Welchen Namen hat die Haupt-CheckBox nun wirklich? Das ließe sich durch geeignete Namensgebung beheben. Ich weiß außerdem nicht, was Du mit aktivieren meinst:

    bigbase schrieb:

    wen ich jetzt alle checkboxen aktiviere

    Unter welchen Umständen wird die Haupt-CheckBox auf enabled gestellt? Im bisherigen Code finde ich dazu nix. Oder meinst Du auf Checked? Oder meinst Du gar mit "alle checkboxen" eigentlich nur die drei untergeordneten (Buchstaben, Zahlen, Sonderzeichen)? Mit folgendem Code (den ich erstmal absichtlich nicht mit CE-Namen versehen habe), scheint es mir so zu laufen, wie Du es brauchst, wobei CheckBox1=Haupt-CheckBox ("Generiere Passwort aus")

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    2. CheckBox2.Enabled = CheckBox1.Checked
    3. CheckBox3.Enabled = CheckBox1.Checked
    4. CheckBox4.Enabled = CheckBox1.Checked
    5. If Not CheckBox1.Checked Then
    6. CheckBox2.Checked = False
    7. CheckBox3.Checked = False
    8. CheckBox4.Checked = False
    9. End If
    10. End Sub
    11. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    12. CheckBox1.Checked = My.Settings.cb1
    13. CheckBox2.Checked = My.Settings.cb2
    14. CheckBox3.Checked = My.Settings.cb3
    15. CheckBox4.Checked = My.Settings.cb4
    16. End Sub
    17. Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    18. My.Settings.cb1 = CheckBox1.Checked
    19. My.Settings.cb2 = CheckBox2.Checked
    20. My.Settings.cb3 = CheckBox3.Checked
    21. My.Settings.cb4 = CheckBox4.Checked
    22. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Ich konnte das erstnal so lösen ja ich weis bennene deine Controlls richtig ;)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    2. If CheckBox4.Checked Then
    3. CheckBox1.Enabled = True
    4. CheckBox2.Enabled = True
    5. CheckBox3.Enabled = True
    6. Else
    7. CheckBox1.Enabled = False
    8. CheckBox2.Enabled = False
    9. CheckBox3.Enabled = False
    10. End If
    11. If CheckBox4.Checked = False Then
    12. CheckBox1.Checked = False
    13. CheckBox2.Checked = False
    14. CheckBox3.Checked = False
    15. CheckBox4.Checked = False
    16. End If
    17. End Sub
    Dies hier ist identisch:

    VB.NET-Quellcode

    1. Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged
    2. CheckBox1.Enabled = CheckBox4.Checked
    3. CheckBox2.Enabled = CheckBox4.Checked
    4. CheckBox3.Enabled = CheckBox4.Checked
    5. If CheckBox4.Checked = False Then
    6. CheckBox1.Checked = False
    7. CheckBox2.Checked = False
    8. CheckBox3.Checked = False
    9. End If
    10. End Sub
    Nur:
    Die Haken rauszunehmen ist dahingehend falsch, weil der Ausgangszustand nicht mehr reproduziert wird, wenn Du CB4 aktivierst.
    Besser ist es dann, primär CB4 abzufragen und erst bei True CB1, CB2, CB3 abzufragen.
    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!

    bigbase schrieb:

    Ich konnte das erstnal so lösen

    Warum diese Aneinanderreihungen?
    Warum nicht einfach das was du willst direkt als Code formulieren?
    alle untergeordneten Checkboxen auf selben Status wie Haupt-Checkbox setzen und Haken entfernen, wenn nicht aktiviert

    VB.NET-Quellcode

    1. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    2. For Each cb in {CheckBox1, CheckBox2, CheckBox3} 'alle untergeordneten Checkboxen
    3. cb.Enabled = Checkbox4.Checked 'auf selben Status wie Haupt-Checkbox setzen
    4. If Not cb.Enabled Then cb.Checked = False 'und Haken entfernen, wenn nicht aktiviert
    5. Next
    6. End Sub
    Das spart nicht nur enorm Code, sondern ist auch noch lesbar.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    2. If CheckBox4.Checked Then
    3. CheckBox1.Enabled = True
    4. CheckBox2.Enabled = True
    5. CheckBox3.Enabled = True
    6. Else
    7. CheckBox1.Enabled = False
    8. CheckBox2.Enabled = False
    9. CheckBox3.Enabled = False
    10. End If
    11. If CheckBox4.Checked = False Then
    12. CheckBox1.Checked = False
    13. CheckBox2.Checked = False
    14. CheckBox3.Checked = False
    15. CheckBox4.Checked = False
    16. End If
    17. End Sub


    Ich habe auch nochmal eine Frage dazu. Diese bezieht vllt. auch auf die Programmlogik. Ist es nicht eig. egal ob die Checkboxen 1,2 und 3 Checked sind?
    Durch eine einfache Abfrage könnte geprüft werden ob die CheckBox4 "checked" ist und falls das zutrifft wird der Code ausgeführt oder eine Methode aufgerufen.

    Beispiel:

    VB.NET-Quellcode

    1. If CheckBox4.Checked = True Then
    2. 'Dein Quelltext oder Methode
    3. End If


    Wenn ich mir z.b. mal vergleichbare Programme anschaue in denen ich so eine Auswahlmöglichkeit habe, spielt es auch keine Rolle ob die untergeordnete Auswahl markiert ist oder nicht.

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

    Wenn die untergeordneten keine Rolle spielen würden, könnte man sie löschen. Doch dann würden dem Benutzer wohl die Entscheidungen genommen werden, welch eine Art von Passwort generiert werden (ich impliziere diese Funktionalität dem Code). Da manche Websites Passwörter mit Sonderzeichen ablehnen, wäre die Einschränkung der Passwortart doch sinnvoll.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Naja aber wenn die Boxen 1, 2, 3 ja eh deaktiviert werden wenn die box4 nicht checked ist dann kann der Benutzer ja nicht mehr entscheiden.

    Ich lese den code so:
    Wenn Passwort generieren ausgewählt dann aktiviere box1, 2 und 3 sonst deaktiviere die boxen

    Damit ist dem Benutzer ja die entscheidung schon abgenommen wurden und somit soll quasi die generation des pw nicht ausgeführt werden wenn box4 nicht checked ist.
    Jetzt versteh ich, was Du meinst.
    Ja gut, aber wir kennen nicht das gesamte Programm. Es ist durchaus möglich, dass es im Gesamtkontext Sinn ergibt. Wäre das Programm nur dafür da, ein Passwort zu generieren, könnte man auch die Existenz der Haupt-CheckBox infrage stellen, denn wenn man diese abwählt, würde das Programm wohl gar nix machen. Aber das Design seines Programms lassen wir lieber mal den TE für sich entscheiden ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @bigbase das ist wohl den meisten bekannt ;)

    Ich würde gern das von VaporiZed aufgreifen, wozu ist die Hauptcheckbox da? Was kann dein Programm, wenn die unchecked ist ?
    Des Weiteren ist petaods Code der wohl leserlichste und gleichzeitig kürzeste.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    MajorOli schrieb:

    Ist es nicht eig. egal ob die Checkboxen 1,2 und 3 Checked sind?

    RodFromGermany schrieb:

    Die Haken rauszunehmen ist dahingehend falsch, weil der Ausgangszustand nicht mehr reproduziert wird, wenn Du CB4 aktivierst.
    Das hat halt Konsequenzen, die noch nicht zu @bigbase durchgedrungen sind. :/
    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!
    ... @bigbase alles wäre einfacher gewesen, hätte man die Controls einfach mal kurz benannt. Dann müsste man nicht von Haupt-Checkboxen, CB4, usw. sprechen.

    Ganz ehrlich, ich versteh das Problem mittlerweile eh nicht mehr. Da wird gechecked, geunchecked, geenabled und wieder ungeanabled.

    Ist doch völlig wurscht, ob die Passwort-Optionen nun gesperrt/gechecked sind oder nicht. Am Ende geht es doch nur um diese eine, unbenannte, CheckBox 4 welche vorgibt ob ein Passwort angelegt wird oder nicht. Falls die nicht gechecked ist ist der Rest ja eh unwichtig.

    Übrigens: @bigbase Je mehr abgefahrene Logik du da jetzt noch einbaust, desto schwieriger wird es für den User dein Programm zu bedienen und zu verstehen. Hierzu gehört auch, Controls sinnvoll zu verwenden und nicht inflationär auf der Form zu verteilen. -> keep it smart and simple (k.i.s.s Prinzip)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich frage mich sowieso, welches Passwort generiert werden soll, wenn keine der drei untergeordneten Checkboxen angeklickt ist.
    Ein Passwort ohne Buchstaben, Zahlen und Sonderzeichen???
    Das ist bestimmt sehr sicher, da keiner auf die Idee kommt, ein leeres Passwort zu verwenden ;)

    Ich vermute, dass zwei Checkboxen (für Zahlen und Sonderzeichen) völlig ausreichen würden, weil die anderen beiden ungecheckt keinen Sinn machen.
    Aber, wie oben schon erwähnt wurde, die Programmlogik ist Sache des TE und wird mit den hier gegebenen Informationen nicht ausreichend beleuchtet.
    Und wenn ich seine Beiträge richtig interpretiere, ist er wohl auch nicht daran interessiert, dass wir uns da einmischen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --