Listview -> 4. Subitem auslesen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Listview -> 4. Subitem auslesen

    Guten Tag Paradiser :)

    Ich komme wegen einem weiterem Problem von mir zu euch da ich mir nicht mehr zu helfen weiß..



    Ich habe ein Listview und dort 4 Spalten nun möchte ich aber wenn ich eine Reihe anklicke (FullRowSelect = True) das das 4 Subitem ausgelesen wird (URL)

    Kann mir vielleicht jemand einen Tipp geben, das wäre sehr lieb :)

    Liebe grüße,
    require
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.

    VB.NET-Quellcode

    1. Private Sub ListView1_Kundensuche_ItemActivate(sender As Object, e As EventArgs) Handles ListView1.ItemActivate
    2. Dim Variable as String = ListView1.SelectedItems(0).SubItems(3).text
    3. MsgBox(Variable)
    4. End Sub


    Doppelklicke nun einen Eintrag
    Hatte grade einen kleinen Denkfehler habs nun richtig gerückt aber jetzt kommt

    Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ListView1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.


    :/
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Joa und wo is das Problem? Häufiger Fehler und wurde hier auch schon sehr sehr sehr sehr oft behandelt. Die Fehlermeldung sagt ja auch alles aus. Musst sie halt Invoken, suche danach hier im Forum, da wirste etliche Threads zu finden =)
    Hi
    übrigens gibt es auch so etwas wie FocusedItem. FocusedItem ist das Item, das diesen gepunkteten Fokusrahmen um sich hat, ausgewählte Elemente sind die, die komplett gehighlightet werden. Häufig, wie wahrscheinlich auch in deinem Fall, will man eben genau das fokusierte Elemente ansprechen. Ansonsten wäre es grundsätzlich per For-Each zu lösen, wenn nicht Multiselect = False.
    Kopiere übrigens einfach mal die Fehlermeldungen ohne die projektabhängigen Sachen in eine Suchmaschine, wenn du sie selbst nicht verstehst. Dann gleiche den Exception-Text mit der Erklärung dazu ab und versuche zu verstehen, was er dir sagt. Das hilft dir wesentlich mehr, als wenn du wegen jeder Kleinigkeit nachfragen musst ;).

    Gruß
    ~blaze~
    @~blaze~

    Ja würde ich nun gerne aber leider nicht möglich bei der nächsten Fehlermeldung


    Fehler 1 Fehler bei der Überladungsauflösung,
    da keine zugreifbare "New" mit diesen Argumenten aufgerufen werden kann:
    "Public Sub New(start As System.Threading.ParameterizedThreadStart)":
    Die Signatur der Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ParameterizedThreadStart(obj As Object)" nicht kompatibel. "Public Sub New(start As System.Threading.ThreadStart)": Die Signatur der Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ThreadStart()" nicht kompatibel.


    Habe mich nach diesem Thread gerichtet: [VB 2010] Controls Threadsicher machen

    Code:

    VB.NET-Quellcode

    1. Dim t As New Thread(AddressOf ListView1_SelectedIndexChanged)
    2. t.Start()


    SelectedndexChange:

    VB.NET-Quellcode

    1. Private Sub ListView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
    2. Dim url = ListView1.SelectedItems(0).SubItems(3).Text
    3. End Sub
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Fehler 1 Fehler bei der Überladungsauflösung, ==> eine Überladung kann nicht aufgelöst werden, kommt vor, wenn die Signatur unterschiedlich ist (Parameteranzahl oder Parametertypen)
    da keine zugreifbare "New" mit diesen Argumenten aufgerufen werden kann: ==> Liegt am Konstruktor
    "Public Sub New(start As System.Threading.ParameterizedThreadStart)":
    Die Signatur der Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ParameterizedThreadStart(obj As Object)" nicht kompatibel. ==> Signatur ist ParameterizedThreadStart(object) "Public Sub New(start As System.Threading.ThreadStart)": Die Signatur der Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs)-Methode ist mit dem Delegaten "Delegate Sub ThreadStart()" nicht kompatibel. ==> Signatur ist ThreadStart()
    Du erwartest aber, dass die Parameter von ListView1_SelectedIndexChanged verwendet werden. Die Signatur von der Methode ist aber mit keiner der beiden möglichen Signaturen identisch und somit schlägt die Überadungsauflösung fehl.
    Schau' dir dazu einfach die Themen Delegaten, Control.BeginInvoke und Control.Invoke an.

    Gruß
    ~blaze~
    SelectedIndexChanged wird dann auch gefeuert, wenn ein Item deselektiert wird, d.h. zu dem Zeitpunkt ist nichts ausgewählt. In diesem Fall kommt der Fehler.
    Du musst also nochmal prüfen, ob ein Item ausgewählt ist. Beispiel:

    VB.NET-Quellcode

    1. Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
    2. With DirectCast(sender, ListView)
    3. If .FocusedItem IsNot Nothing Then
    4. Debug.Print(.FocusedItem.SubItems(4).Text)
    5. End If
    6. End With
    7. End Sub
    Und noch meinen Senf dazu. Nimm ein DataSet und ein DataGridView und Du kannst Dir diesen ganzen Müll ganz einfach sparen.... Achtung Pro-Tip.!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o