Argumente fehlerhaft, Konvertierung scheitert


  • Administrator

    benutzer_1234 schrieb:

    Habe jetzt kurzen Prozess gemacht. Eventhandler komplett raus und über den Blitz bei Eigenschaften einfach einen neuen genriert. Jetzt läuft das debugging auch wieder weiter.

    Hätte ich nicht anders gemacht 😉

    benutzer_1234 schrieb:

    Liegt der Fehler darin, wie ich die Liste zurückgebe?

    Sieht nicht so aus. Ausser der Code den du hier zeigst, stimmt nicht überrein mit deinem Code 😉
    Verkleinere mal das Deck auf ein paar Einträge und geh einfach mal mit dem Debugger durch, was er denn genau lädt. Du solltest unten beim Debuggen weitere Fenster haben (Autos, Locals). Sonst kannst du die Fenster holen über das Menü Debug -> Windows. Sobald der Debugger irgendwo hält, siehst du dort die Variablen und kannst sie auch aufklappen, um die inneren Werte zu sehen. Dies geht auch, wenn du mit der Maus über der Variable im Code schwebst.

    Also den Breakpoint am Anfang setzen und dann auch in die LoadFromFile reinsteppen mit F11 und die Methode durchgehen. Dann siehst du auch, ob alles korrekt geladen und abgelegt wird. Wenn du mit F10 durch die Methode stepst und ans Ende kommst, geht er automatisch wieder raus in die Load Methode. Bei GetDecks wieder F11 drücken, damit du reinkommst und wieder F10 bis du rauskommst.

    Über die Locals kannst du jeweils prüfen, welche Werte denn in der Liste sind.

    Noch so ein paar Dinge am Rande:
    Du hast erneut alle Variablen öffentlich gemacht. Komm davon weg! Mach alles privat was privat sein kann und nur das öffentlich, was wirklich öffentlich sein muss. Verwende Getter und Setter. Das erleichtert dir auch das Debuggen, damit nicht jeder von überallher auf die Variablen zugreifen kann und du damit bessere Kontrolle hast.
    Wieso verwendest du als Wert des Decks decimal ? decimal sollte man nur für Spezialfällen benutzen, da es eine 128 Bit 10er Potenz Gleitkommazahl ist. Für Dezimalzahlen reicht float oder double meistens aus. Wenn man mit Ganzzahlen arbeitet, sollte man auch Ganzzahlen verwenden, z.B. int .

    Grüssli



  • Ok, habe mir das Ausgabefenster geholt und das Debuggen gestartet.Ist es normal, dass dabei unzählige Zeilen rauskommen, bei denen in etwa das folgende steht:

    Einzelschritt: Nichtbenutzercode "System.Windows.Forms.Application.SetCompatibleTextRenderingDefault" wird übersprungen.
    


  • Was ich schonmal sagen kann, das Programm befühlt die Werte (deck.Name) ordnungsgemäß. Auslesen der Datei funktioniert also. Die while-Schleife:

    while ((line = rd.ReadLine()) != null)
                {
                    string[] words = line.Split('|');
    
                    Deck deck = new Deck();
                    deck.Colors = words[0];
                    deck.Name = words[1];
                    deck.Categorie = words[2];
                    deck.Text = words[3];
                    deck.DeckValue = decimal.Parse(words[4]);
    
                    liste.Add(deck);
                }
    

    wird bis zum letzten Eintrag durchgeführt. Dann springt er in die Kopfzeile und möchte von vorn anfangen. Beim F11 auf deck.Colors stellt er fest, es gitb nun keinen Eintrag mehr und beendet die Schleife und öffnet sofort das Formload.

    Danach springt er aber nicht in Hauptprogramm zurück, um:

    List<Deck> Decks = decktab.GetDecks();
    
                foreach (Deck deck in Decks)
                {
                    listDecks.Items.Add(deck.ToString());
                }
    

    auszuführen.


  • Administrator

    Hast du eine leere Zeile im File? Z.b. am Ende? Dann führt das line.Split('|') zu einem Array mit der Länge 0 und wenn du auf words[0] zugreifst, wird eine IndexOutOfRangeException geworfen.

    Er stellt daher nicht fest, dass es keine Einträge mehr gibt bei words[0] und beendet nicht einfach die Schleife, sondern er wirft dann eine IndexOutOfRangeException . Und das sollte jedem sofort auffallen ... 😕

    benutzer_1234 schrieb:

    Ok, habe mir das Ausgabefenster geholt und das Debuggen gestartet.Ist es normal, dass dabei unzählige Zeilen rauskommen, bei denen in etwa das folgende steht:

    Einzelschritt: Nichtbenutzercode "System.Windows.Forms.Application.SetCompatibleTextRenderingDefault" wird übersprungen.
    

    Ja, das ist normal. Wenn du irgendwo reinspringen wolltest, was nicht zu deinem Code gehört. Wenn also dein Debugger z.B. bei Application.SetCompatibleTextRenderingDefault(false) war und du auf F11 gedrückt hast 😉

    Grüssli



  • Tatsächlich. Am Ende der Einträge war eine Leerzeile. Der Debugger hatte auch " " angeziegt, aber das habe ich nicht so interpretiert, als das es eine Leerzeile ist 😉



  • Nun kann ich endlich wieder ganz normal debuggen und zum Problem kommen, weshalb die Lsite nicht untereinander ausgegebn wird. Mir wurde gesagt debugge mal und schaue, was du erkennst. Wird richtig geladen, übergeben und so weiter.

    Die decktab aus dem Hauptprogramm bekommt tatsächlich alle Werte und hat vier Einträge mit jeweils entsprechenden Namen, Farben und so weiter. Ich kann ehrlich gesagt nicht sehen, wo der Fehler ist, weil da ja nicht steht, wie die gespeichert werden.


  • Administrator

    Ehm, bei welchem Fehler sind wir nun? Ich habe gerade ein wenig den Überblick verloren 😉

    Grüssli



  • Sorry, kann ich verstehen.
    Also ich habe ja die Liste listDecks, auf der die deck.Name alle ausgegeben werden sollten. Dies erfolgt aber nicht der Reihe nach unten:

    Name 1
    Name 2
    Name 3
    

    sondern in 2er Schritten hintereinander mit merkwürdigem Zeilen umbruch, sieht so aus:

    Name 1    Name 2
    
    Name 3    Name 4
    

  • Administrator

    Ehm, ich muss hier mal raten ...
    Du verwendest eine ListView ? Und du hast in den Eigenschaften nicht die richtige View ausgewählt? 😉

    Grüssli



  • Vielen Dank, du hast richtig geraten 😉


Anmelden zum Antworten