首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取listview被点击列的列索引

获取listview被点击列的列索引
EN

Stack Overflow用户
提问于 2018-02-01 00:57:37
回答 1查看 1.3K关注 0票数 3

我没有找到一个本机过程来检索列的索引,信息如下:

代码语言:javascript
复制
ListView1.ListItems.Item (ListView1.SelectedItem.Index) .ListSubItems (HERE)

我知道如何获得行的索引,如下所示:

代码语言:javascript
复制
ListView1.SelectedItem.Index

我知道如何恢复鼠标的位置,如下所示:

代码语言:javascript
复制
Private Sub ListView1_MouseUp (ByVal Button As Integer, ByVal Shift As Integer, _
                               ByVal x As stdole.OLE_XPOS_PIXELS, _
                               ByVal y As stdole.OLE_YPOS_PIXELS)

我认为应该可以找到这个索引。提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 20:36:56

原生方法是使用LVM_SUBITEMHITTEST。

模块:

代码语言:javascript
复制
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Type LVHITTESTINFO
    pt As POINTAPI
    flags As Long
    iItem As Long
    iSubItem  As Long
End Type

Private Const LVM_SUBITEMHITTEST As Long = &H1039
Private Const LVHT_ONITEM        As Long = &HE

Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

表格:

代码语言:javascript
复制
Private Sub yourListView_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim hitTest As LVHITTESTINFO

    With hitTest
        .flags = LVHT_ONITEM
        .pt.X = (X \ Screen.TwipsPerPixelX)
        .pt.Y = (Y \ Screen.TwipsPerPixelY)
    End With

    SendMessage yourListView.hwnd, LVM_SUBITEMHITTEST, 0, hitTest

    If (hitTest.iItem < 0) Then Exit Sub

    If hitTest.iSubItem = 0 Then
        MsgBox yourListView.ListItems(hitTest.iItem + 1).Text
    Else
        MsgBox yourListView.ListItems(hitTest.iItem + 1).SubItems(hitTest.iSubItem)
    End If
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48547501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档