Wenn die ListBox leer ist, Fehlermeldung beim Speicherversuch

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wenn die ListBox leer ist, Fehlermeldung beim Speicherversuch

    Moinsen!
    Ich habe eine ListBox, in der man vorhandene Dateien Speichern und später laden kann.
    Nun wäre es ja sinnvoll eine Meldung einzubauen, die dir den Hinweis gibt, dass du nicht speichern kannst wenn die ListBox leer ist und den Speichervorgang im selben Moment abbricht.
    Ich schätze mal, dass das mit einem "If Satz" geschehen kann, oder?

    Danke schon mal für hilfreiche Antworten! :thumbup:
    1. Halte deine Daten intern in ner passenden Datenstruktur fest statt in einer Listbox.
    2. Ja, ist sehr wahrscheinlich, dass das mit einer If-Abfrage geschehen wird. Streng doch mal Google an und frag, wie du auf eine leere Listbox prüfst.
    Ja oder so rum gedacht...
    Also:

    VB.NET-Quellcode

    1. Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Speichern.Click
    2. If ListBox1.Items.Count = 0 Then
    3. MessageBox.Show(Me, "Füge erst Lieder in die Playlist ein, dann kannst du speichern!", "Negativ", MessageBoxButtons.OK, MessageBoxIcon.Information)
    4. End If


    Wie bekomme ich denn da die Funktion eingebaut, dass "Speichern" gar nicht erst ausgeführt wird?
    Solange du

    VB.NET-Quellcode

    1. My.Settings.Save()
    nicht aufrufst, wird auch nix gespeichert.

    Beispiel:
    (Mit speichern)

    VB.NET-Quellcode

    1. Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    2. If ListBox1.Items.Count = 0 Then
    3. MessageBox.Show(Me, "Füge erst Lieder in die Playlist ein, dann kannst du speichern!", "Negativ", MessageBoxButtons.OK, MessageBoxIcon.Information)
    4. Else
    5. My.Settings.Save()
    6. End If


    Ohne Speichern wäre dann der Code im vorherigen Post.
    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.”
    -Unbekannt
    Hier ist mal der ganze Code, den ich verwende....... :

    VB.NET-Quellcode

    1. Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Speichern.Click
    2. If ListBox1.Items.Count = 0 Then
    3. MessageBox.Show(Me, "Füge erst Lieder in die Playlist ein, dann kannst du speichern!", "Negativ", MessageBoxButtons.OK, MessageBoxIcon.Information)
    4. End If
    5. Dim PlayList As New System.Collections.Specialized.StringCollection
    6. For Each item As String In ListBox1.Items
    7. PlayList.Add(item)
    8. Next
    9. My.Settings.PlayList = PlayList
    10. My.Settings.Save()
    11. MessageBox.Show(Me, "Deine PlayList wurde gespeichert. Beim nächsten Start der Anwendung auf 'Laden' Klicken", "Gespeichert!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. End Sub


    So und da will ich jetzt einbauen das, wenn der Fall eintrifft und man eine leere Playlist speichern will, eine Meldung kommt und "SPeichern" gar nicht erst stattfindet..
    Das Ganze könnte man so machen:

    VB.NET-Quellcode

    1. Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Speichern.Click
    2. If ListBox1.Items.Count = 0 Then
    3. MessageBox.Show(Me, "Füge erst Lieder in die Playlist ein, dann kannst du speichern!", "Negativ", MessageBoxButtons.OK, MessageBoxIcon.Information)
    4. Exit Sub
    5. Else
    6. Dim PlayList As New System.Collections.Specialized.StringCollection
    7. For Each item As String In ListBox1.Items
    8. PlayList.Add(item)
    9. Next
    10. My.Settings.PlayList = PlayList
    11. My.Settings.Save()
    12. MessageBox.Show(Me, "Deine PlayList wurde gespeichert. Beim nächsten Start der Anwendung auf 'Laden' Klicken", "Gespeichert!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    13. End If
    14. End Sub


    EDIT: "Exit Sub" stoppt die Routine.
    EDIT 2: Man könnte das auch mit Sprungmarken machen, sieht aber nicht so toll aus.
    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.”
    -Unbekannt
    @Rinecamo Dann werde ich mich auf die Suche nach einer Lösung machen :thumbup:
    Jetzt aber mal was ganz anderes... Wenn ich die .exe der Anwendung starte (AllInOnePlayer/bin/Debug/Test.exe) und bei der Playlist direkt auf den Button "Laden" klicke, kommt eine Fehlermeldung von Windows und das Programm schließt. Ist ja eigentlich auch logisch, da der Button zwar eine Funktion hat, diese aber nicht ausgeführt werden kann, weil zuvor nichts gespeichert wurde... Wie bekomme ich es hin, dass der Button beim ersten Start des Programmes, nicht (z.B.) drückbar ist? Wäre erst mal eine vorübergehende Lösung...

    Hier der Code vom Button:

    VB.NET-Quellcode

    1. Private Sub Laden.Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Laden.Click
    2. ListBox1.Items.Clear()
    3. If My.Settings.PlayList.Count <= 0 Then
    4. MessageBox.Show(Me, "Du hast noch keine PlayList erstellt!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    5. Else
    6. For Each item As String In My.Settings.PlayList
    7. ListBox1.Items.Add(item)
    8. Next
    9. End If
    10. End Sub
    Die If-Clause ist imho unnötig, da du eine For Each hast. Außerdem dürfte da keine Fehler auftauchen, wie wärs wenn du mal die Exception mit Stacktrace postest?

    LG

    PS: Mit einem richtigen Datenmodell würde sowas nicht passieren :whistling:
    z.B könnte man eine Einstellung (Boolean) erstellen, die nach dem ersten Start auf "True" gestellt wird.

    Beispiel:

    VB.NET-Quellcode

    1. Private Sub DeineForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. If My.Settings.RanOnce = False Then
    3. My.Settings.RanOnce = True
    4. My.Settings.Save()
    5. End If
    6. End Sub


    Ist zwar recht banal, aber effektiv.
    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.”
    -Unbekannt
    Gut, bei aller Liebe, aber bevor du noch irgendwas an deinem Projekt machst, solltest du dich erst mal mit den Grundlagen beschäftigen.
    Zum einen nerven Threads bei denen man schon gar nicht helfen will, weil es programmiertechnisch der reinste Horror ist, und zum anderen hilft dir nichts davon weiter um auch zukünftige Probleme zu lösen.
    Nimm dir das, was ErfinderDesRades in einem deiner letzten Threads geschrieben hat, bitte zu Herzen.

    DerDepp2 schrieb:

    @ErfinderDesRades Wie meinst? :D Die ListBox dient ja als Playlist, will man diese löschen, gibt's dafür einen eigenen Button ;)
    Ja, aber wenn man die entleerte Playlist nicht speichern kann, und öffnet das Prog erneut, dann ist die PlayList ja wieder da - obwohl man zuvor ja diesen Button betätigte - oder?