Den Status von 55 Checkboxen speichern

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Den Status von 55 Checkboxen speichern

    Hallo liebes Forum,

    ich habe eine vielleicht ungewöhnliche Frage, aber ich möchte gerne 55 Checkboxen in den Settings speichern, sprich ob sie Checked sind oder nicht...

    Bisher habe ich es so, dass jede einzelene Checkbox einzelnd gespeichert wird:

    VB.NET-Quellcode

    1. My.Settings.Checked1 = CheckBox1.Checked



    Aber eigentlichen müsste es doch auch mit einer Schleife gehen wie:

    VB.NET-Quellcode

    1. For i = 1 to 55
    2. My.Settings.Checked(i) = CheckBox(i).Checked
    3. Next



    oder? Ich kriege es auf jeden fall nicht hin... Würde mich sehr über Hilfe freuen.
    Falls sie nicht in einer Groupbox o.Ä. sind, kannst du die CB aufjedenFall so abfragen

    VB.NET-Quellcode

    1. For i As Integer = 1 to 55
    2. Me.Controls("CheckBox" & i.ToString) ...
    3. Next
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Das ist alles gebastel - nehme dir slices Beitrag zu Herzen. Falls du nicht selbst auf eine bessere Lösung kommst kannst du ja einen Screenshot anhängen und ein bisschen was zum Programm erzählen. Da findet sich sicher ein neuer Weg.

    friloo schrieb:

    Nun will ich, daß die die ausgewählt sind gespeichert werden...

    Dann mach das doch ...

    VB.NET-Quellcode

    1. Dim FlagField As Long = 0, counter As Integer
    2. For Each cb As CheckBox In UebergeordnetesControl.Controls.OfType(Of CheckBox)()
    3. If cb.Checked Then FlagField = FlagField Or (1 << counter)
    4. counter += 1
    5. Next
    6. ' -> FlagField kann jetzt in MySettings gespeichert werden
    7. ' zurückholen:
    8. For Each cb As CheckBox In UebergeordnetesControl.Controls.OfType(Of CheckBox)()
    9. cb.Checked = (FlagField And 1 << counter) > 0
    10. counter += 1
    11. Next
    So kannst du nicht weitermachen... Was ich tun würde:

    1) Eine Effekt-Klasse schreiben. Wenn Vererbung Sinn macht eine EffektBase-Klasse. Nötige Eigenschaften: Checked und Image sowie notwendige Funktionalität gemäß deiner Programmidee

    2) Ein UserControl zusammenklicken, dass genau ein Objekt vom Typ Effekt bzw EffektBase verwaltet. Also Bildchen anzeigt und die Checkbox. Ziel: Verändert sich das Effekt-Objekt, so wird das Control aktualisiert, Klickt man auf die Checkbox, so wird das Objekt angepasst.

    3) Jetzt brauchst du ein weiteres UserControl, und zwar verwaltet dies eine List(of Effekt bzw EffektBase). Dafür eignet sich z.B. eines der Contrainer-Controls aus der Toolbox, da kannst du einfach neue (zur Laufzeit erstellte) UserControls aus 2) rein-adden (und ein Objekt aus der Effekt-Liste zuweisen) und sie werden automatisch so angeordnet wie auf deinem Screenshot.

    Und was hat das alles gebracht? Naja, du hast Daten von der GUI getrennt. Du hast eine List(of Effekt) die du wunderbar abspeichern und laden kannst (z.B. könntest du dafür eine CSV-Datei anlegen oder noch besser einen Effekt-Datensatz in ein DataSet überführen). Du musst nie wieder Checkbox234.Checked schreiben, sondern kannst den Datensatz direkt fragen ob er aktiv geschaltet ist.
    Das ganze kann man natürlich noch schöner machen, aber so ist das mal ein Anfang^^