Fehler beim auslesen aus einer Combobox (?)

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Fehler beim auslesen aus einer Combobox (?)

    Moinsen...

    ich bin gerade leicht am verzweifeln. Folgendes Szenario:

    Ich habe eine Combobox (cb_depots). Dort kann ich einen Eintrag nach belieben hinzufügen. Die Einträge der Combobox werden zusätzlich in einem Array zwischengespeichert für spätere Zwecke.
    Dann habe ich einen Pfad (VehiclePath), welcher zusammen mit dem aktuellen Eintrag der Combobox in das Array "Vehicles", ebenfalls für spätere Zwecke, eingefügt wird.

    Infos vorab: Das "Depot" und der "Pfad" werden durch ein "#" voneinander getrennt, Beispiel: "Depot1#C:\Vehicles\Audi.veh"

    Folgender Code:



    VB.NET-Quellcode

    1. ' Wenn eines der beiden keine Einträge enthält, soll nichts ausgeführt werden
    2. If (CR_02_VEHICLES.Count = 0) Or (CR_02_DEPOTS.Count = 0) Then
    3. Exit Sub
    4. Else
    5. ' For-Schleife zum Auslesen der Einträge aus dem Array "Vehicles"
    6. For i As Integer = 0 To CR_02_VEHICLES.Count - 1
    7. ' Listview leeren, damit nur die Einträge angezeigt werden, die auch zu dem des ausgewählten "Depots" passen
    8. lv_bus.Items.Clear()
    9. ' Das aktuelle Depot soll aus der Combobox ausgelesen werden
    10. Dim ActualDepot As String = cb_depot.SelectedItem.ToString
    11. ' Die Fahrzeuge werden nacheinander aus dem Array gefischt
    12. Dim ActualVehicle As String = CR_02_VEHICLES(i)
    13. ' Stellt den Pfad zu dem Fahrzeug dar
    14. Dim VehiclePath As String
    15. ' Wird zum Zwischenspeichern des Depots, welches ausgelesen wird, gebraucht
    16. Dim Depot As String
    17. ' Position des Zeichens "#", da Depot und Vehicle so voneinander getrennt werden in einer anderen Methode
    18. Dim position As Short
    19. ' Rausfischen der position von "#"
    20. position = ActualVehicle.IndexOf("#")
    21. ' Rausfischen des Depots durch entfernen des restlichen Zeugs inkluse "#"
    22. Depot = ActualVehicle.Remove(position)
    23. ' Pfad rausfischen
    24. VehiclePath = ActualVehicle.Substring(position + 1)
    25. ' Wenn das ausgelesene Depot mit dem markierten Depot in der Combobox übereinstimmt, wird der Name des Fahrzeuges ausgelesen (uninteressant, der Teil funktioniert)
    26. If Depot = ActualDepot Then
    27. GetVehicleName(VehiclePath)
    28. Else
    29. ' Zum testen hab ich einfach mal angegeben, dass er "False" anzeigen soll, wenn die Depots nicht gleich sind
    30. MsgBox("False")
    31. End If
    32. Next
    33. End If


    Jetzt das Problem: Habe ich nur ein Depot mit Fahrzeugen, funktioniert das ganze wunderbar. Füge ich ein zweites Depot hinzu (OHNE FAHRZEUGE!) funktioniert es ebenfalls. Füge ich nun diesem zweiten/dritten/vierten/whatever Depot dann Fahrzeuge hinzu, wird alles aus dem/den vorherigen Depot/s nichts mehr ausgelesen, sondern nur die Fahrzeuge aus dem letzten Depot!
    Habe ich hier einen dummen Denkfehler drinne? Ich hänge nun ca. 5-6 Stunden an diesem Problem und kann den Fehler nicht finden... :(

    Mit freundlichen Grüßen,
    FranzBauer
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
    ich würd dringend raten, fang nochmal von vorn an.

    Deine Anwendung ist eindeutig eine bisserl anspruchsvollere Datenverarbeitung, und du brauchst ein relationales Datenmodell.
    Nur mit Arrays, Comboboxen und vielen Dateien in C:\Vehicles\ gehst du unter.

    Datenverarbeitungs-Vorraussetzungen

    Und fang mit dem dortigen Punkt 1) an, also richte dein VB erstmal richtig ein, dass man überhaupt damit ernstzunehmend programmieren kann - ich sehe in deim Codesnippet reihenweise ziemliche Gräuseligkeiten.
    In dem Ordner "C:\Vehicles\" können beliebig viele Dateien sein, das tut dem Programm keinen Abbruch, da vom Nutzer selbst die Fahrzeuge hinzugefügt werden - das können mal 2 sein, mal 10. Es werden also nicht alle genutzt, im Praxiseinsatz sind es vielleicht insgesamt 5-6 Stück, aber wirklich maximal.
    Das Problem liegt ja nur darin, dass die "Depots" nicht mehr richtig ausgelesen werden. Das ganze muss IMMER flexibel sein, das heißt ich muss es nachträglich ändern können und auch zwischen den Depots switchen können. Im Vehicles-Ordner liegen ja nur Dateien, aus denen wird nur eine Zeile ausgelesen. Das ist kein Ding. Ich frage mich aber, warum er alles was im ersten Depot ist nicht mehr ausliest - er sagt dass Depot sei unterschiedlich, also mir wird "False" angezeigt. ?( Und die Arrays dienen als zwischenspeicher, bevor das ganze gaaaaaaanz am Ende in eine Textdatei gepackt wird.
    Ich beschäftige mich weiter damit, wenns sein muss komplett neu schreiben. Danke trotzdem. :)
    Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
    "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!

    FranzBauer schrieb:

    Das ganze muss IMMER flexibel sein, das heißt ich muss es nachträglich ändern können und auch zwischen den Depots switchen können...
    ... Und das ist bestimmt noch nicht alles...
    Kurz: Du brauchst ein relationales Datenmodell :D
    Und musst zuvor überhaupt lernen, was das ist, und wie man's umsetzen kann.
    Links dazu habich ja gegeben.

    Wie weit bist du mit Punkt 1) der Liste?