Rubrik: Controls · ListView | VB-Versionen: VB4, VB5, VB6 | 03.07.01 |
Klick auf eine Datenspalte im ListView erkennen Ein Beispiel, wie man erkennen kann, auf welche Daten-Spalte in einem ListView geklickt wurde. | ||
Autor: Dieter Otter | Bewertung: | Views: 21.590 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das ListView-Control wird oft eingesetzt, da man hier - im Gegensatz zur Standard-Listbox - mehrere Spalten festlegen kann. Und wenn man dann das ListView im "Report"-Stil verwendet ähnelt es doch sehr der normalen Listbox. Immer wenn der Anwender auf einen Eintrag in der Liste klickt, wird dann ja auch das ItemClick-Ereignis ausgelöst - nur weiß man leider nicht, ob der Klick innerhalb der 1. Spalte, 2. Spalte oder der x. Spalte erfolgte. Mit einem kleinen Trick lässt sich die Spalte dennoch feststellen. Voraussetzung ist allerdings, daß alle Spalten im sichtbaren Fensterbereich liegen!
Und so funktioniert's:
Im MouseDown-Ereignis merkt man sich einfach die x-Position des Mauszeigers, indem man den Wert in eine formglobalen Variable speichert. Erfolgt nun das ItemClick-Ereignis, so vergleicht man die "gemerkte" x-Position mit den einzelnen Spaltenbreiten.
Und das sieht dann so aus:
' Im Allgemein-Teil der Form Dim xPos As Single Private Sub ListView1_MouseDown(Button As Integer, _ Shift As Integer, x As Single, y As Single) ' Mausposition merken xPos = x End Sub Private Sub ListView1_ItemClick(ByVal Item As _ MSComctlLib.ListItem) Dim I As Integer Dim Column As Integer Dim xWert As Single ' Spalte ermitteln xWert = 0 With ListView1 For I = 1 To .ColumnHeaders.Count If xPos >= xWert And xPos <= _ xWert + .ColumnHeaders(I).Width Then Column = I: Exit For End If xWert = xWert + .ColumnHeaders(I).Width Next I End With MsgBox "Klick auf Spalte " & Column End Sub
Anmerkung:
Der Klick auf die Spalte wird natürlich nur "registriert", wenn es sich um eine mit Daten gefüllte Listenzeile handelt!