ListView - Gewählte Reihe identifizieren

  • VB.NET

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

    ListView - Gewählte Reihe identifizieren

    Hallo,

    ich würde gerne wissen, wie es denn möglich ist eine bestimmte Reihe in einer ListView zu "identifizieren".
    In meinem Fall habe ich eine solche ListView mit den Spalten {"Client-ID", "Client-Name"}, wenn der Client nun die Verbindung trennt soll er eben den Eintrag löschen, der dem Client der gerade die Verbindung trennt entspricht.
    Meine bisherigen Ideen/Versuche waren:
    Spoiler anzeigen

    1. Eine Variable (Integer) mit jeder neuen Verbindung zu erhöhen und mit jeder getrennten Verbindung zu verkleinern. Da tritt aber das Problem auf, dass die Clients dann genau in der Reihenfolge connecten müssen, wie sie auch disconnecten. D.h er löscht dann beispielsweise einen Eintrag, dessen Client noch online ist, aber der Client der die Verbindung getrennt hat ist noch aufgelistet :S


    Danke im Vorraus ;)

    Edit:
    Ich hatte vergessen zu erwähnen, das kann man aber auch schlussfolgern :D, dass es sich um TCP-IP handelt
    Ok. Vielleicht solltest du dir auch mal folgende durchlesen (ich sehe gerade, ich habe deinen Beitrag auch teils falsch gelesen):
    msdn.microsoft.com/en-us/libra…stviewitem(v=vs.110).aspx (ListViewItem - Da stehen weitere Details drin, wie du solche Daten abrufen kannst).
    msdn.microsoft.com/en-us/libra…m.subitems(v=vs.110).aspx (Die Unter-Controls in der ListViewItem)

    Ich hoffe das hilft dir weiter. Soll ich dir auch noch ein Beispiel schreiben? Vielleicht hilft das (du müsstest dann aber in VB übersetzen. Ich bin bei VB-Code ziemlich unsicher, da ich hauptsächlich in C# meine Projekte anstelle)
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    Noch habe ich keine Lösung gefunden, ich bin nach wie vor offen für Tipps etc.

    EDIT:
    Ich bin jetzt so weit, dass für jeden neue Connection ein ListViewItem erstellt wird, und der Tag (ListViewItem.Tag) entspricht einem Counter, der bei jeder neuen Verbindung um eins hochzählt, und bei jeder getrennten Verbindung um eins runter... Wenn ich mir allerdings nach dem setzen des Tags genau diesen ausgeben will, dann ist die MessageBox einfach leer... :/

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „schroffl“ ()

    Ach, sorry. Ich hab das letzte Nacht verpeilt.

    Ich mache mich mal eben auf und schreibe ein wenig Code.

    Edit: Könntest du mir die Properties deine ListView auflisten? Das macht es für mich einfacher. Einfach ein Screenshot oder Code aus dem Designer.
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    Hat sich inzwischen erledigt, du kannst den Code natürlich trotzdem gerne schreiben, evtl. hast du ja eine bessere Lösung als ich... Musst du natürlich nicht.
    So hab ich das Ganze gelöst:
    Spoiler anzeigen

    Und zwar habe ich in meine Structure für den Client ein 'ListViewItem' hinzugefügt (Dim LVI As ListViewItem)
    Sobald dann eine neue Verbindung reinkommt:

    VB.NET-Quellcode

    1. Dim Con As New Connection
    2. Con.LVI = New ListViewItem
    3. Con.LVI = ListViewConnections.Items.Add(Con.IdNumber) 'Das habe ich auch mit 'With' versucht, hat leider nicht geklappt :/
    4. Con.LVI.SubItems.Add(Con.Nick)

    Wenn der Client dann die Verbindung trennt:

    VB.NET-Quellcode

    1. ListViewConnections.Items.Remove(C.LVI)

    Eigentlich ziemlich simpel, da hätte ich gar nicht mit den Tags herumexperimentieren müssen, wäre mir das gleich aufgefallen ;)


    Dennoch Dank für deine Hilfe, und wie gesagt, wenn es dir Freude bereitet darfst du natürlich auch noch gerne deinen Ansatz schicken :)
    Ich habe deine Frage anscheinend ganz falsch verstanden, so wie ich das hier an deinem Code sehe.
    Ich dachte, dass du fragtest, wie du Daten aus verschiedenen Headern der ListView abrufen kannst. Deswegen meine Frage.

    Aber vielleicht nützt dir folgendes ja:

    VB.NET-Quellcode

    1. Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    2. Dim selectedItem As ListViewItem = CType(sender, ListView).SelectedItems.Item(0)
    3. Dim idx0 As Integer = selectedItem.Index
    4. For i As Integer = 0 To selectedItem.SubItems.Count
    5. Select Case i
    6. Case 0
    7. MessageBox.Show(Me, "Header 2 Text: " & selectedItem.SubItems(i).Text, "Header 2 Text")
    8. End Select
    9. Next
    10. End Sub


    Wenn jemand mit besseren VB-Kenntnissen als ich den Code sieht: Ich hatte Option Strict On!
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln