Listview: Doppelklick auf Subitem feststellen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Listview: Doppelklick auf Subitem feststellen

    Hey, stehe mal wieder vor einem Problem und finde keine Lösung.

    Mal zur Beschreibung, ich habe eine Listview mit der Detail-Ansicht. Wenn man jetzt auf eines der Subitems klickt, will ich wissen, in welcher Spalte es steht und welchen Wert das Item davor hat. Wie kann ich das realisieren?
    Probier mal folgendes aus.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
    3. Dim lvw As ListView = Nothing
    4. lvw = CType(sender, ListView)
    5. If (lvw.SelectedItems.Count = 1) Then
    6. MessageBox.Show(lvw.SelectedItems(0).Text)
    7. End If
    8. End Sub
    9. End Class
    Hallo,

    er wollte doch die geklickten SubItems auslesen...dazu brauchst du die Breite der Columns...also ungefähr so:

    VB.NET-Quellcode

    1. If sender.SelectedIndices.Count > 0 Then
    2. Dim pnt As Point = Point.Subtract(Me.PointToClient(Control.MousePosition), New Size(sender.Left, sender.Top))
    3. Dim posX As Integer
    4. Dim itm As Integer = sender.SelectedIndices(0)
    5. For x As Integer = 0 To sender.Columns.Count - 1
    6. If pnt.X > posX And pnt.X < posX + sender.Columns(x).Width Then
    7. MsgBox(sender.Items(itm).SubItems(x).Text)
    8. Exit For
    9. End If
    10. posX += sender.Columns(x).Width
    11. Next
    12. End If


    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Öhm, sobald ich die Listview in ein TabControl packe, funktioniert das ganze schon gar nicht mehr =/.


    VB.NET-Quellcode

    1. 'Nicht mehr nötig...


    So, das Problem ist, dass ein Klick ganz hinten rechts gar nicht mehr registriert wird, sondern nur noch einer der etwas weiter links vom rechten Rand ist.


    Weiß jmd woran das liegen könnte und was man dagegen tun kann?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „prosnooper“ ()

    Es kommt keine Fehlermeldung. Ich habe lediglich die Listview in ein TabControl gesteckt, seit dem funktioniert der Code

    VB.NET-Quellcode

    1. If sender.SelectedIndices.Count > 0 Then
    2. Dim pnt As Point = Point.Subtract(Me.PointToClient(Control.MousePosition), New Size(sender.Left, sender.Top))
    3. Dim posX As Integer
    4. Dim itm As Integer = sender.SelectedIndices(0)
    5. For x As Integer = 0 To sender.Columns.Count - 1
    6. If pnt.X > posX And pnt.X < posX + sender.Columns(x).Width Then
    7. MsgBox(sender.Items(itm).SubItems(x).Text)
    8. Exit For
    9. End If
    10. posX += sender.Columns(x).Width
    11. Next
    12. End If
    auch nicht mehr so ganz...