erstmaliges Starten Auswahlfenster mit 3 Optionen, Auswahl speichern und im Programm dann immer auf diese Auswahl zurückgreifen

  • VB.NET

Es gibt 46 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    erstmaliges Starten Auswahlfenster mit 3 Optionen, Auswahl speichern und im Programm dann immer auf diese Auswahl zurückgreifen

    Hallo liebe Programmier-Gemeinde,

    ich habe ein Programm, welches am beim ersten maligen Starten ein Auswahlfenster öffnen soll mit Checkboxen oder ähnlichen.
    Hier soll es 3 Auswahlmöglichkeiten geben. Soweit so gut - dieses Formblatt zuerstellen ist kein Problem.

    Nun soll jedoch nicht jedes mal wieder dieses Auswahlfenster kommen, wenn man das Programm wieder startet. Daher die Frage, wie speichere ich die Auswahl und wie kann ich dann im Programm auf diese Auswahl zurückgreifen?

    Danke im Vorraus.

    zauber777 schrieb:

    wie speichere ich die Auswahl
    4 Settings.
    3 entsprechend Deiner Optionen und eine, dass die Optionsauswahl erledigt ist.
    Ansonsten folge den Links von @AliveDevil .
    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 habe mich nun mal einbisschen versucht und komme nicht ganz weiter.
    Auf meiner Form (welche nur beim erstmaligen Starten des Progamms erscheinen soll) habe ich 3 Radio-Buttons und ein Speichern-Button.
    In den Projekteigenschaften habe ich unter Einstellungen 3 Werte ausgewählt 1. "Einstellung1 mit Typ=String und Bereich=Benutzer", 2. "Einstellung2 mit Typ=String und Bereich=Benutzer", 3. "Einstellung2 mit Typ=String und Bereich=Benutzer".

    Meine Code von der Auswahl-Form sieht jetzt so aus

    VB.NET-Quellcode

    1. Public Class AuswahlForm
    2. Private Sub AuswahlForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If RadioButton1.Checked Or RadioButton2.Checked Or RadioButton3.Checked = True Then
    4. Form1.Closed()
    5. Form2.Show()
    6. End If
    7. End Sub
    8. Private Sub Speichern_Click(sender As Object, e As EventArgs) Handles Speichern.Click
    9. My.Settings.Einstellung1 = RadioButton1.Checked
    10. My.Settings.Einstellung2 = RadioButton2.Checked
    11. My.Settings.Einstellung3 = RadioButton3.Checked
    12. My.Settings.Save()
    13. My.Settings.Reload()
    14. End Sub
    15. End Class


    Ist dies erst einmal vom Prinzip her richtig?
    Wenn ja wie greife ich dann aus der Form2 auf das gespeicherte zu? von der theorie her so?

    VB.NET-Quellcode

    1. If AuswahlForm.RadioButton1.Checked = True then ...
    Nun habe ich die ganze Zeit rumprobiert. Leider speichert es einfach nicht die Auswahl ab. Ich weiss leider nicht an was es liegt.
    Im Anhang habe ich mal das Projekt hochgeladen.

    Es sind 2 Forms (die Auswahl-Form und die 2. Form).

    Code von Form1 (Auswahlfenster) :

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If RadioButton1.Checked Or RadioButton2.Checked Or RadioButton3.Checked = True Then
    4. Me.Visible = False
    5. Form2.Show()
    6. End If
    7. End Sub
    8. Private Sub speichern_Click(sender As Object, e As EventArgs) Handles Speichern.Click
    9. My.Settings.Einstellung1 = RadioButton1.Checked = True
    10. My.Settings.Einstellung2 = RadioButton2.Checked = True
    11. My.Settings.Einstellung3 = RadioButton3.Checked = True
    12. My.Settings.Save()
    13. My.Settings.Reload()
    14. End Sub
    15. End Class


    Code von Form2 :

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If Form1.RadioButton1.Checked = True Then
    4. MsgBox("Radio Button 1")
    5. End If
    6. If Form1.RadioButton2.Checked = True Then
    7. MsgBox("Radio Button 2")
    8. End If
    9. If Form1.RadioButton3.Checked = True Then
    10. MsgBox("Radio Button 3")
    11. End If
    12. End Sub
    13. End Class
    Dateien
    • SpeichernTest.7z

      (53,29 kB, 99 mal heruntergeladen, zuletzt: )

    zauber777 schrieb:

    Wenn ja wie greife ich dann aus der Form2 auf das gespeicherte zu?
    Über My.Settings.Einstellung1, auf die Du überall im Programm zugreifen kannst.
    Wenn Dein Projekt ordentlich eingestellt ist, werden die Settings automatisch beim Beenden gespeichert, das ist die Default-Einstellung.
    Du müsstest also beim Start das OptionsAuswahlSetting abfragen und bei noch nicht vorgenommener Einstellung Deinen Dialog aufrufen.
    Wie Du einen Dialog aufrufst, findest Du hier.

    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!
    1 Kardinal-Fehler zu vermeiden täte die Lösung ermöglichen: Option Strict On!

    Die Lösung steht auf: Settings richtig verwenden + binden - Die Speichern-Klick-Methode bitte komplett löschen, wenn Databinding verwendet wird.

    Und sowas ist mehrfach peinlich:

    VB.NET-Quellcode

    1. If RadioButton1.Checked Or RadioButton2.Checked Or RadioButton3.Checked = True Then
    Weil man verwendet einfach ein Or mehr AndAlso - OrElse
    Und die Checked-Property ist vom Datentyp boolean, die braucht man nicht mit True oder False zu vergleichen.


    Edit: Ja - auf das Form-Debakel bin ich jetzt nicht eingegangen - dassis auch ein Kardinalfehler (der sich aber erst später rächt)
    Dateien
    Vielen lieben Dank. Ich habe mir soeben das umgeänderte Projekt von dir angeschaut.
    Dadurch habe ich auch sehen können, dass ich die DataBindings vergessen habe...

    Nun stellt sich mir aber nur die Frage, warum der Button kein Binding hat? Woher weiß das Programm, dass wenn ich auf den Button klicke dies gespeichert werden soll!? Es ist ja kein Code im Button wie "My.Settings.Save()" oder ähnliches...

    zauber777 schrieb:

    Es ist ja kein Code im Button wie "My.Settings.Save()" oder ähnliches...

    RodFromGermany schrieb:

    Wenn Dein Projekt ordentlich eingestellt ist, werden die Settings automatisch beim Beenden gespeichert, das ist die Default-Einstellung.
    Ein Button hat kein Binding. Properties haben ein Binding.
    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!
    Alles klar. Damit die Einstellung gespeichert und übernommen wird habe ich nun einen "Restart" in den SpeichernButton eingebaut.

    Jetzt das Programm zwar neu, aber die erste Form (das Auswahlfenster) erscheint erneut, obwohl dies ja eigentlich nicht so sein sollte!?

    Form1 (Auswahlfenster)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If RadioButton1.Checked Or RadioButton2.Checked Or RadioButton3.Checked = True Then
    4. Me.Visible = False
    5. Form2.Show()
    6. End If
    7. End Sub
    8. Private Sub Speichern_Click(sender As Object, e As EventArgs) Handles Speichern.Click
    9. Application.Restart()
    10. End Sub
    11. End Class​


    Form2

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If Form1.RadioButton1.Checked = True Then
    4. MsgBox("Radio Button 1")
    5. End If
    6. If Form1.RadioButton2.Checked = True Then
    7. MsgBox("Radio Button 2")
    8. End If
    9. If Form1.RadioButton3.Checked = True Then
    10. MsgBox("Radio Button 3")
    11. End If
    12. If Form1.RadioButton1.Checked = False And Form1.RadioButton2.Checked = False And Form1.RadioButton3.Checked = False Then
    13. MsgBox("Keine Auswahl")
    14. End If
    15. End Sub
    16. End Class​

    zauber777 schrieb:

    erscheint erneut
    Weil Deine Logik nicht stimmt.

    VB.NET-Quellcode

    1. If Not RadioButton1.Checked AndAlso Not RadioButton2.Checked AndAlso Not RadioButton3.Checked Then
    2. MessageBox.Show("nicht da")
    3. End If

    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!

    zauber777 schrieb:

    Es bleibt dabei
    Mit welchem Code?
    Setze einen Haltepunkt auf die If-Zeile und sieh Dir die Settings an.
    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!
    @zauber777 Dann stimmen die Settings und oder die Setting-Bindings nicht.
    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!

    zauber777 schrieb:

    Nun stellt sich mir aber nur die Frage, warum der Button kein Binding hat? Woher weiß das Programm, dass wenn ich auf den Button klicke dies gespeichert werden soll!? Es ist ja kein Code im Button wie "My.Settings.Save()" oder ähnliches...
    @RodFromGermany: klar haben Buttons Bindings.
    Unter der Haube halten die Controls jeweils eine BindingsCollection mit Binding-Objekten drin. Jede Binding-Objekt verweist auf eine Property im Control und auf eine Property iwo anners, eben auf eine Property des angebundenen Objektes.

    @zauber777 : Deine Fragen sind glaub im Tut beantwortet - das Tut ist das wichtige, nicht der Fertig-Code.

    Zum Problem: RadioButtons sind für sowas schlecht geeignet, denn die haben ein eigenwilliges Verhalten: die checken/unchecken sich ja gegenseitig, und das funkt dann böse da zwischen rein, wenn die Bindings eine Setzung vornehmen wollen.

    Funktional wäre hier eine Listbox viel besser geeignet, mit den 3 Einträgen, und zu binden wäre die Listbox.SelectedIndex-Property.

    RodFromGermany schrieb:

    Ein Button hat kein Binding. Properties haben ein Binding.
    Binding - Singular.

    ErfinderDesRades schrieb:

    klar haben Buttons Bindings.
    Bindings - Plural.

    Sag ich doch.
    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!
    Ok, wenn es über eine ListBox besser ist, dann habe ich jetzt eine Listbox auf meiner Form1 und die RadioButtons entfernt.
    In den Bindingeigenschaften der Listbox ist jedoch keine Auswahl möglich?

    Mein Form1 sieht jetzt so aus :

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. ListBox1.Items.Add("Einstellung 1")
    4. ListBox1.Items.Add("Einstellung 2")
    5. ListBox1.Items.Add("Einstellung 3")
    6. If ListBox1.SelectedItem = True Then
    7. Me.Visible = False
    8. Form2.Show()
    9. End If
    10. End Sub
    11. Private Sub Speichern_Click(sender As Object, e As EventArgs) Handles Speichern.Click
    12. Application.Restart()
    13. End Sub
    14. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    15. End Sub
    16. End Class


    Mein Form2 so :

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. If Form1.ListBox1.SelectedIndex = 1 Then
    4. MsgBox("Radio Button 1")
    5. End If
    6. If Form1.ListBox1.SelectedIndex = 2 Then
    7. MsgBox("Radio Button 2")
    8. End If
    9. If Form1.ListBox1.SelectedIndex = 3 Then
    10. MsgBox("Radio Button 3")
    11. End If
    12. If Not Form1.ListBox1.SelectedItem = False Then
    13. MsgBox("Keine Auswahl")
    14. End If
    15. End Sub
    16. End Class
    Dateien