Как определить, в какой колонке ListView был кликПроблема заключается в том, что при использование элемента управления ListView в режиме списка (Listview.View = lvwList), нет свойств, определяющих, по какой колонке пользователь кликнул в выделенной строке. Метод HitTest в ListView возвращает только ссылку на ListItem, по которому пользователь кликнул. Чтобы получить нужную нам информацию, можно воспользоваться API функцией SendMessage в событиях MouseUp или MouseDown в ListView: Private Declare Function SendMessage Lib _ "user32" Alias "SendMessageA" (ByVal hWnd As _ Long, ByVal wMsg As Long, ByVal wParam As _ Long, lParam As Any) As Long Private Const LVM_SUBITEMHITTEST As Long = 4153 Private Type POINTAPI X As Long Y As Long End Type Private Type LVHITTESTINFO pt As POINTAPI lngFlags As Long lngItem As Long lngSubItem As Long End Type Private Sub ListView1_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Dim hti As LVHITTESTINFO Dim lngRet As Long hti.pt.X = X / Screen.TwipsPerPixelX hti.pt.Y = Y / Screen.TwipsPerPixelY lngRet = SendMessage(ListView1.hWnd, _ LVM_SUBITEMHITTEST, 0&, hti) Debug.Print "Row=" & hti.lngItem, Debug.Print "Col=" & hti.lngSubItem End Sub
|