winforms 确定ListView中单击列

5tmbdcev  于 2022-11-16  发布在  其他
关注(0)|答案(5)|浏览(179)

我需要在C#的ListView中单击列
我有一些来自How to determine the clicked column index in a Listview的示例代码,但我不确定应该如何实现它。

gv8xihay

gv8xihay1#

天啊,每个人都懒得发布代码。这个过程有三个步骤:
1.使用Control.MousePosition获取鼠标位置并转换为客户端坐标。
1.调用HitTest函数来查找鼠标所指向的内容。这将返回一个包含大量信息的对象,除了实际的列号之外,因此...
1.使用IndexOf搜索子项数组以查找列号。
代码如下:

private void listViewMasterVolt_DoubleClick(object sender, EventArgs e)
{
    Point mousePosition = myListView.PointToClient(Control.MousePosition);
    ListViewHitTestInfo hit = myListView.HitTest(mousePosition);
    int columnindex = hit.Item.SubItems.IndexOf(hit.SubItem);
}
lawou6xi

lawou6xi2#

ListView控件有一个HitTest方法,你给予它鼠标单击事件的x和y坐标,它给你一个对象,告诉你在那一点的行(列表视图项)和列(列表视图子项)。

mspsb9vt

mspsb9vt3#

这是VB.NET代码,但对象应该相同。

Private LVUsersLastHit As Point
    Private Sub lvUsers_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lvUsers.MouseUp
        Me.LVUsersLastHit = e.Location
    End Sub
    Private Sub LvUsers_Doubleclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvUsers.DoubleClick
        Dim HTI As ListViewHitTestInfo = Me.lvUsers.HitTest(Me.LVUsersLastHit)
        If HTI.Item Is Nothing OrElse HTI.SubItem Is Nothing Then Exit Sub 'nothing was dblclicked
        MsgBox("doubleClicked the " & HTI.Item.ToString & " Item  on the " & HTI.SubItem.ToString & " sub Item")
    End Sub
omjgkv6w

omjgkv6w4#

e.列实际上包含索引

private void lv_ColumnClick(object sender, ColumnClickEventArgs e)
    {            
        Int32 colIndex = Convert.ToInt32(e.Column.ToString());
        lv.Columns[colIndex].Text = "new text";

    }
9udxz4iz

9udxz4iz5#

也许是为了新的框架或什么,但我的VS2022我可以调用columnClic事件,并使用e.列,这给予我的索引,0为第一列,1为第二列,以此类推.例如:

private void ListViewD_ColumnClick(object sender, ColumnClickEventArgs e)
{
    //MessageBox.Show("column index: " + e.Column);
    if(e.Column == 1)//column index
    {
        MessageBox.Show("Clic on second column");
    }
}

相关问题