ListBox: Argument out of range exception Fehler. Hilfe bitte :/

  • VB.NET

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

    ListBox: Argument out of range exception Fehler. Hilfe bitte :/

    Liebe Community,

    ihr seid meine letzte Hoffnung. Hab schon alles mögliche durchprobiert aber noch keine Lösung für mein Problem gefunden.

    Ich habe eine Listbox in die man 3 einträge schreiben kann (hier Ordnerpfade). Diese möchte ich in die My.Settings schreiben um später darauf zugreifen zu können.

    Allerdings bekomme ich beim Auslesen immer einen "Argument out of range" Fehler. Ich habe mir bereits einige andere Themen hier im Forum durchgelesen, dieses haben mir aber leider nicht weitergeholfen. Hier ist der Quellcode des Programms:

    VB.NET-Quellcode

    1. Public Class Einstellungen
    2. Private Sub Einstellungen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. If My.Settings.Überschreiben = True Then
    4. CheckBox1.Checked = True
    5. ElseIf My.Settings.Überschreiben = False Then
    6. CheckBox1.Checked = False
    7. End If
    8. ListBox1.Items(1) = My.Settings.Ziel1
    9. ListBox1.Items(2) = My.Settings.Ziel2
    10. ListBox1.Items(3) = My.Settings.Ziel3
    11. End Sub
    12. Private Sub CheckBox1_CheckedChanged(sender As Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
    13. If CheckBox1.Checked = True Then
    14. My.Settings.Überschreiben = True
    15. ElseIf CheckBox1.Checked = False Then
    16. My.Settings.Überschreiben = False
    17. End If
    18. My.Settings.Save()
    19. End Sub
    20. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    21. FolderBrowserDialog1.ShowDialog()
    22. ListBox1.Items.Add(FolderBrowserDialog1.SelectedPath)
    23. If ListBox1.Items.Count = 4 Then
    24. ListBox1.Items.Remove(ListBox1.Items(3))
    25. End If
    26. End Sub
    27. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    28. ListBox1.Items.Remove(ListBox1.SelectedItem)
    29. End Sub
    30. Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    31. My.Settings.Ziel1 = ListBox1.SelectedItem.ToString
    32. My.Settings.Ziel2 = ListBox1.SelectedItem.ToString
    33. My.Settings.Ziel3 = ListBox1.SelectedItem.ToString
    34. My.Settings.Save()
    35. Me.Close()
    36. End Sub
    37. End Class



    Der Fehler kommt dann am Ende bei "My.Settings.Ziel1 = ListBox1.SelectedItem.ToString". Ich habe auch schon folgendes versucht:

    VB.NET-Quellcode

    1. ListBox1.SelectedItem = ListBox1.Items(1)
    2. My.Settings.Ziel1 = ListBox1.SelectedItem.ToString


    Aber auch das löst einen Fehler aus.

    Ich wäre sehr dankbar um eure Hilfe, da ich kein Profi bin und eher zum Spaß Programmiere.

    liebe Grüße -
    Indizes sind nullbasiert, sol heißen das erste Element ist das Element 0. Du zählst hier aber von 1 bis 3. Verringere einfach jede Zahl um 1 und es sollte klappen.

    Edit:
    Sorry, dein Problem ist ein anderes (das oben schon auch, aber in dem Fall nicht direkt). Du kannst keinen Elementen einen Wert zuweisen, die nicht existieren. Ändere im Load-Event die letzten drei Zeilen um in jeweils Listbox1.Items.Add(My.Settings.Zielx), wobei x für die Zahlen 1 bis 3 steht. Setze davor noch ein ListBox1.Items.Clear.

    Außerdem:
    Du kannst folgendes

    VB.NET-Quellcode

    1. If My.Settings.Überschreiben = True Then
    2. CheckBox1.Checked = True
    3. ElseIf My.Settings.Überschreiben = False Then
    4. CheckBox1.Checked = False
    5. End If

    auch durch das ersetzen:

    VB.NET-Quellcode

    1. CheckBox1.Checked = My.Settings.Überschreiben


    Und das hier

    VB.NET-Quellcode

    1. If CheckBox1.Checked = True Then
    2. My.Settings.Überschreiben = True
    3. ElseIf CheckBox1.Checked = False Then
    4. My.Settings.Überschreiben = False
    5. End If

    durch das:

    VB.NET-Quellcode

    1. My.Settings.Überschreiben = CheckBox1.Checked

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

    Hab leider gerade kein IE zur hand, aber ich glaube das funktioniert:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. My.Settings.Ziel1 = ListBox1.Items(0).ToString
    3. My.Settings.Ziel2 = ListBox1.Items(1).ToString
    4. My.Settings.Ziel3 = ListBox1.Items(3).ToString
    5. My.Settings.Save()
    6. Me.Close()
    7. End Sub


    //Edit: Artentus war schneller
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%