确定ListView中的单击列

我需要在C#中的ListView中单击列

我有一些示例代码来自如何确定Listview中的单击列索引,但我不确定如何实现它。

Jeez,每个人都懒得发布代码。 该过程分为三个步骤:

  1. 使用Control.MousePosition获取鼠标位置并转换为客户端坐标。
  2. 调用HitTest函数以查找鼠标指向的内容。 这将返回一个包含大量信息的对象,但实际的列号除外…
  3. 使用IndexOf搜索子项arrays以查找列号。

这是代码:

 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); } 

ListView控件有一个HitTest方法。 您可以为其指定鼠标单击事件的x坐标和y坐标,并为您提供一个对象,告诉您该点的行(列表视图项)和列(列表视图子项)。

e.Column实际上持有索引

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

这是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