Listview items

  • VB.NET

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

    Listview items

    Moin,
    Was ist daran Falsch? Fehlermeldung: Ungültige Konvertierung von Typ ListViewItem in Typ String.

    VB.NET-Quellcode

    1. Dim Pfad1 As String = Application.StartupPath & "\datei.txt"
    2. For Each item As String In ListView1.Items
    3. My.Computer.FileSystem.WriteAllText(Pfad1, item & vbNewLine, True)
    4. Next
    5. Dim pfad2 As String = Application.StartupPath & "datei2.txt"
    6. For Each DrawListViewSubItemEventArgs As String In ListView1.Items
    7. My.Computer.FileSystem.WriteAllText(Pfad1, DrawListViewSubItemEventArgs & vbNewLine, True)
    8. Next
    9. End Sub

    Ich steige nicht so ganz durch, was dadran falsch sein soll...
    Gruß
    Probier es mal mit item.ToString
    und nimm System.IO.File.WriteAllText(...)
    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!

    VB.NET-Quellcode

    1. Dim Pfad1 As String = Application.StartupPath & "datei.txt"
    2. Dim item As New ListViewItem
    3. For Each item.tostring In ListView1.Items
    4. System.IO.File.WriteAllText(Pfad1, item & vbNewLine, True)
    5. Next
    6. Dim pfad2 As String = Application.StartupPath & "datei2.txt"
    7. For Each DrawListViewSubItemEventArgs As String In ListView1.Items
    8. My.Computer.FileSystem.WriteAllText(Pfad1, DrawListViewSubItemEventArgs & vbNewLine, True)
    9. Next
    10. End Sub

    So?
    Gibt die Fehlermeldung:

    Fehler 1 Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden. (Verweis auf item.tostring)

    RodFromGermany schrieb:

    Probier es mal mit item.ToString
    So:

    VB.NET-Quellcode

    1. System.IO.File.WriteAllText(Pfad1, item.ToString & vbNewLine, True)
    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!
    Fehler 1 "item" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

    Bekomme ich noch als Fehlermeldung.
    Was das heißt, ist mir klar.
    Aber mit
    Dim item As New ListViewItem
    gibt er sich auch nicht zufrieden. :/
    Wer hat irgend etwas von New gesagt?
    Zurück zu Deinem 1. Snippet:

    VB.NET-Quellcode

    1. For Each item As String In ListView1.Items
    2. My.Computer.FileSystem.WriteAllText(Pfad1, item.ToString & vbNewLine, True)
    3. Next
    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!
    Dann bekomme ich aber trotzdem noch:
    Ungültige Konvertierung von Typ ListViewItem in Typ String.
    Du hast höchstwahrscheinlich verstanden worum es geht, aber ich sag es einfach trotzdem mal.
    Alle Items der Listview Box sollen in einer .txt Datei gespeichert werden, damit sie beim Programmstart wieder aufgerufen werden können.
    Versuche mal den hier:

    VB.NET-Quellcode

    1. For Each item as ListviewItem In ListView1.Items
    2. My.Computer.FileSystem.WriteAllText(Pfad1, item.ToString & vbNewLine, True)
    3. Next

    ListviewItem ist vom Typ Object. Deshalb kann man der Listview alle erdenklichen Objekte, also auch komplette Klassen, hinzufügen. Diese Klassen sollten die ToString-Methode überschreiben, damit ein sinnvoller String angezeigt wird. So könnten z.B. Objecte Klasse Person mit den Propertys Vorname, Namchname und Geburtstag die ToString-Methode so überschtreiben: Return String.Concat(Vorname," ; ", Nachname, " ; " , Geburtstag.toShortDateTime).
    Darum ist bei dir die Variable item ein ListviewItem und kein String. Also ist For Each item As String In ListView1.Items falsch.

    OT: Setze Pfade mit System.IO.Path.Combine(String1, String2) zusammen. Deine beiden Pfade sind nämlich unterschiedlich zusammengemauschelt. Einer davon ist definitiv falsch. Mit Pah.Combine passiert das nicht.

    Fiel Fergnügen

    Vatter

    Edit: WriteAllText überschreibt mit jedem Durchlauf deine vorangegangenen Einträge. Such mal nach AppendText oder nutze besser einen Stringbuilder. Dem fügst du Item für Item hinzu und schreibst ihn mit einem Rutsch in die Textdatei.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Entschuldigung, ich hab das Listview nicht so richtig wahrgenommen.
    2 Möglichkeiten:
    1. Du steigst auf ein datengebundenes DataGridView um und kannst das mit WriteXml(PFAD) und ReadXml(PFAD) behandeln
    oder
    2. Du siehst Dir beispielhaft mal diese Methoden an.
    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!