ListBox Index 0

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ListBox Index 0

    Guten Morgen,
    ich bin im Moment daran, ein programm zu schreiben. Jedem Listbox Eintrag gehören 6 Zeilen in einer txt Datei.
    Die erste Zeile ist jedoch der Name und dieser soll nicht mehr ausgelesen werden sondern dann später als Name einer Groupbox zugeordner werden, dies ist für meine Frage jedoch eigentlich unwichtig.

    Um die richtigen Zeilen auszulesen, d.h.
    Beim Listbox Eintrag 1 die Zeile 2 - 6
    Beim Listbox Eintrag 2 die Zeile 8-12
    Beim Listbox Eintrag 3 die Zeile 14-18
    Beim Listbox Eintrag 4 die Zeile 20-24

    Und dann das Ergebnis in eine andere Listbox zu schreiben, habe ich mir diese Schleife geschrieben:

    VB.NET-Quellcode

    1. Dim auslesen() As String = IO.File.ReadAllLines("Data.txt")
    2. Dim auswahl As Long
    3. auswahl = LB_Einträge.SelectedIndex
    4. For i As Long = auswahl * 6 - 4 To auswahl * 6 Step 1 'Ich weiß, Step 1 zu schreiben ist eig. unnötig.
    5. LB_Info.Items.Add(Decrypt(auslesen(i)))
    6. Next i


    Nun komme ich an ein Problem, das ich noch nie hatte. Ich Rechne ja mit dem Index. Nun ist aber der Index des ersten Eintrages 0. Und 0*6-4 ergibt nunmal keine auslesbare Zeile. Die Rechnung funktioniert also erst ab Index 1.
    Da mir es zu hässlich ist, den ersten Eintrag (Index 0) leer zu lassen, wollte ich fragen, ob man nicht den ersten Eintrag mit Index 1 versehen kann, also Index 0 komplett wegstreichen. Dies wäre nämlich das einfachste, da man mit 0 einfach nicht gut multiplizieren kann :D

    Ansonsten müsste ich mit einem Try Catch Block den Index = 0 Fall beheben.

    Würde mich freuen, wenn jemand wüsste, ob und wo man das einstellen kann.
    Wenn Du die Zeilenindizes kennst, mach Dir eine kleine Funktion draus, die dann den Fall 0 gesondert behandelt.
    Auf gar keinen Fall Try / Catch.
    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 es nun mit einer If Abfrage gelöst, sollte doch kein Nachteil sein, oder?

    VB.NET-Quellcode

    1. Private Sub LB_Einträge_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_Einträge.SelectedIndexChanged
    2. Dim auslesen() As String = IO.File.ReadAllLines("Data.txt")
    3. Dim auswahl As Long
    4. auswahl = LB_Einträge.SelectedIndex
    5. If auswahl > 0 Then
    6. For i As Long = auswahl * 6 - 4 To auswahl * 6 Step 1
    7. LB_Info.Items.Add(Decrypt(auslesen(i)))
    8. Next i
    9. ElseIf auswahl = 0 Then
    10. For i As Long = 1 To 5 Step 1
    11. LB_Info.Items.Add(Decrypt(auslesen(i)))
    12. Next i
    13. End If
    14. End Sub
    15. End Class


    Das auswahl*6-4 to auswahl *6 stimmt jedoch noch nicht, weil die txt ja auch mit 0 beginnt :whistling:
    verbessere ich aber gleich noch, sollte ja nicht schwer sein.

    EDIT:
    So ist alles funktionsfähig:

    VB.NET-Quellcode

    1. Private Sub LB_Einträge_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_Einträge.SelectedIndexChanged
    2. Dim auslesen() As String = IO.File.ReadAllLines("Data.txt")
    3. Dim auswahl As Long
    4. auswahl = LB_Einträge.SelectedIndex
    5. If auswahl > 0 Then
    6. For i As Long = auswahl * 6 + 1 To auswahl * 6 + 5 Step 1
    7. LB_Info.Items.Add(Decrypt(auslesen(i)))
    8. Next i
    9. ElseIf auswahl = 0 Then
    10. For i As Long = 1 To 5 Step 1
    11. LB_Info.Items.Add(Decrypt(auslesen(i)))
    12. Next i
    13. End If
    14. End Sub
    15. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tim B.“ ()

    Stimmt, das wäre dann der Start, aber das Ende, das ich mit *6 bestimmt hatte (was auch nicht stimmte, weil es ja mit Index 0 beginnt), hätte man dann ja nicht errechnen können.

    Naja, wie dem auch sei, ich habe es jetz wie im lezten Post steht gelöst.

    RodFromGermany, hast du was an meiner Lösung mit der If-Abfrage auszusetzen? Weil du hattest ja einen anderen Lösungsansatz vorgeschlagen.
    also wenn das funzt

    VB.NET-Quellcode

    1. Private Sub LB_Einträge_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_Einträge.SelectedIndexChanged
    2. Dim auslesen() As String = IO.File.ReadAllLines("Data.txt")
    3. Dim auswahl As Long
    4. auswahl = LB_Einträge.SelectedIndex
    5. If auswahl > 0 Then
    6. For i As Long = auswahl * 6 + 1 To auswahl * 6 + 5 Step 1
    7. LB_Info.Items.Add(Decrypt(auslesen(i)))
    8. Next i
    9. ElseIf auswahl = 0 Then
    10. For i As Long = 1 To 5 Step 1
    11. LB_Info.Items.Add(Decrypt(auslesen(i)))
    12. Next i
    13. End If
    14. End Sub
    15. End Class
    dann funzt das auch

    VB.NET-Quellcode

    1. Private Sub LB_Einträge_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_Einträge.SelectedIndexChanged
    2. Dim auslesen() As String = IO.File.ReadAllLines("Data.txt")
    3. Dim auswahl As Long
    4. auswahl = LB_Einträge.SelectedIndex
    5. For i As Long = auswahl * 6 + 1 To auswahl * 6 + 5 Step 1
    6. LB_Info.Items.Add(Decrypt(auslesen(i)))
    7. Next i
    8. End Sub
    9. End Class
    Du bist mein Held :thumbsup:
    Es lag alles daran, dass ich vorher eine falsche Berechnung verwendet habe, wie auch immer ich auf diese gekommen bin.

    Jaja, Gymnasiasten von heute, an den einfachsten Sachen scheitern und nicht einmal die Grundrechenarten beherrschen. Andere Funktionen meines Programmes, die ich wesentlich schwerer finde, gingen Problemloser, als diese kleine Schleife da.
    Wenn da irgendwas nicht klappt, setze einen Haltepunkt (F9) an den Beginn der jeweiligen Prozdur.
    Steppe sie in Einzelschritten (F10 / F11) durch den Code und sieh Dir mit (Klick drauf, Shift+F9) den Inhalt der Variablen an.
    Wenn da was nicht so ist, wie Du denkst, hast Du einen Fehler gefunden. :thumbup:
    Falls die Fastenkombinationen nicht stimmen, sieh Dir das angehängte Menü an. Es ist im Break-Zustand aktiv.
    Bilder
    • Debug.jpg

      31,48 kB, 302×456, 123 mal angesehen
    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!