I need to get the column clicked in a ListView in C#
I have some sample code from How to determine the clicked column index in a Listview but I'm not sure how I should implement it.
I need to get the column clicked in a ListView in C#
I have some sample code from How to determine the clicked column index in a Listview but I'm not sure how I should implement it.
Jeez, everyone's too lazy to post code. There are three steps to the process:
Control.MousePosition
and convert to client coordinates.HitTest
function to find what the mouse is pointing to. This returns an object with lots of information except the actual column number so...IndexOf
to find the column number.Here's the code:
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.CheckBoxes = true
, FullRowSelect = true
) you might want to utilize if (mousePosition.X >= 20) {... toggle checkbox ...}
–
Comprehensible The ListView
control has a HitTest
method. You give it the x- and y-coordinates of the mouse click event, and it gives you an object that tells you the row (list view item) and column (list view subitem) at that point.
e.Column
actually holds the index:
private void lv_ColumnClick(object sender, ColumnClickEventArgs e)
{
Int32 colIndex = Convert.ToInt32(e.Column.ToString());
lv.Columns[colIndex].Text = "new text";
}
ColumnClick
is only valid for clicking on the column headers –
Phocis Maybe it's for the new frameworks or something, but with my VS2022 I can call the ColumnClick
event and use e.Column
and that gives me the index, 0
for first column, 1
for second column and so on.
example:
private void ListViewD_ColumnClick(object sender, ColumnClickEventArgs e)
{
// MessageBox.Show("column index: " + e.Column);
if(e.Column == 1) // column index
{
MessageBox.Show("Clicked on second column");
}
}
This is VB.NET code, but the objects should be the same.
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
© 2022 - 2024 — McMap. All rights reserved.
e.Location
in theMouseDown
event! – Phocis