If Abfragen Problem mit For Each Schlaufe

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    If Abfragen Problem mit For Each Schlaufe

    Hallo zusammen,

    Ich finde keine Lösung meine Bedingungen mit der For Each Schaufe zu verbinden.

    Es geht darum eine "Zuletzt benutzt" Listview zu erstellen. Immer das zuletzt angeklickte Element soll zuoberst sein.

    Zuerst einmal den Code:

    VB.NET-Quellcode

    1. If lst_last_used.Items.Count <= 0 Then
    2. lst_last_used.Items.Insert(0, itm)
    3. Else
    4. Dim li As ListViewItem
    5. For Each li In lst_last_used.Items
    6. If li.Text = filename Then
    7. lst_last_used.Items.Remove(li)
    8. lst_last_used.Items.Insert(0, itm)
    9. Exit For
    10. Else
    11. lst_last_used.Items.Insert(0, itm)
    12. End If
    13. Next
    14. End If


    In der 1. If Abfrage überprüfe ich ob die Listview leer ist. Wenn ja Item einfügen.
    Ansonsten soll er alle Items in der einer For Each Schalufe überprüfen ob Sie identisch sind mit dem hinzuzufügendem Item (filename). Wenn nicht würde es ja auch wieder heissen, dass dieses Item nicht vorhanden ist, also hinzufügen. Jedoch läuft er später in einen Fehler, wenn das Item zwar vorkommt, aber nicht an erster Stelle war.

    Habt ihr eine Idee wie ich dieses Konstrukt aufbauen muss?

    Danke für eure Inputs. Ich blicke nicht durch

    Gruss Morpheus
    Hi
    besser wäre sogar das:

    VB.NET-Quellcode

    1. Private Sub InsertOrToTop(ByVal txt As String)
    2. For Each li As ListViewItem In lst_last_used.Items
    3. If li.Text = txt Then
    4. lst_last_used.Items.Remove(li)
    5. lst_last_used.Items.Insert(0, li)
    6. Return
    7. End If
    8. Next
    9. lst_last_used.Items.Insert(0, New ListViewItem(txt))
    10. End Sub


    oder? Damit wird keine neue Instanz erzeugt, sondern das alte Item wechselt seine Position. Außerdem könnte man bei ListViewItem die Vererbung super benutzen, da der Umgang damit sonst eher unhandlich ist. Das würde dann in meinem Fall auch nochmal besser sein.

    Gruß
    ~blaze~

    Morpheus schrieb:

    "Zuletzt benutzt" Listview
    Geh mal anders da ran.
    Mach Dir eine List(Of T), dort kannst Du immer das Objekt an der Position 0 einfügen. Diese List(Of T) lässt Du DataSource eines Anzeige-Controls sein, z.B. bei einem DataGridView, da geht das. Ob das bei einem ListView geht, weiß ich nicht.
    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!
    Nope, ein ListView unterstützt keine Datenbindung, außer man programmiert sie entsprechend (könnte man btw. z.B. über einen IExtenderProvider oder Events nachprogrammieren, für Ersteres hatte ich mir schon mal was überlegt, da wäre die Bedienung aus der GUI heraus echt einfach, Zweiteres empfand ich als unelegant).
    Statt List(Of T) empfehle ich eigentlich eher die BindingList(Of T) zu verwenden, da die bei Datenbindungsgeschichten weitaus effizienter ist, als die List(Of T).

    Gruß
    ~blaze~