Rubrik: Controls · ListView | VB-Versionen: VB4, VB5, VB6 | 31.07.07 |
Mehrfachauswahl im ListView per einfachen Klick Dieses Codebeispiel zeigt einen Ansatz, wie man bei Einstaz des ListView-Controls eine Mehrfachauswahl per einfachen Mausklick realisieren kann. | ||
Autor: Dieter Otter | Bewertung: | Views: 10.744 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem wurde im Forum gefragt, wie man beim Einsatz des ListView-Controls eine Mehrfachauswahl per einfachen Mausklick realisieren kann, ohne hierbei immer die STRG-Taste drücken zu müssen.
Nachfolgend ein Ansatz, wie sich das Ganze realisieren lässt. Der Trick besteht darin, dem System vorzugaukeln, dass die STRG-Taste immer gedrückt ist. Dies erreichen wir, indem wir im GotFocus-Ereignis die Keybd_Event-Funktion aufrufen. Im LostFocus-Ereignis wird das Ganze dann wieder deaktiviert.
Option Explicit ' benötigte API-Deklarationen Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_CONTROL = &H11 Dim bCtlPressed As Boolean
Private Sub Form_Load() Dim i As Long With ListView1 ' ListView initialisieren .View = lvwReport .MultiSelect = True .FullRowSelect = True .ColumnHeaders.Add , , "Spalte", 2000 ' ein paar Test-Einträge For i = 1 To 100 .ListItems.Add , , "Eintrag " & CStr(i) Next i End With End Sub
Private Sub ListView1_GotFocus() ' Niederdrücken der STRG-Taste simulieren ' (STRG-Taste bleibt hierbei solange gedrückt, ' wie das ListView den Fokus besitzt) bCtlPressed = True keybd_event VK_CONTROL, 1, 0, 0 End Sub
Private Sub ListView1_LostFocus() ' STRG-Taste wieder loslassen If bCtlPressed Then keybd_event VK_CONTROL, 1, KEYEVENTF_KEYUP, 0 bCtlPressed = False End If End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ' Sicherstellen, dass die STRG-Taste wieder losgelassen wird ListView1_LostFocus End Sub