мне нужно получить столбец щелкнул в ListView в C#Определение щелкнул столбца в ListView
У меня есть пример кода из How to determine the clicked column index in a Listview, но я не знаю, как я должен его реализовать.
мне нужно получить столбец щелкнул в ListView в C#Определение щелкнул столбца в ListView
У меня есть пример кода из How to determine the clicked column index in a Listview, но я не знаю, как я должен его реализовать.
Управление ListView
имеет метод HitTest
. Вы даете ему x- и y-координаты события щелчка мыши, и он дает вам объект, который сообщает вам строку (элемент списка) и столбец (подкласс списка) в этой точке.
Это код 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
, если вы хотите, чтобы столбец (Single) щелкнул, используйте событие Columnclick. Из вышеприведенного кода я мог представить, что вы можете получить индекс подэлемента из массива subitem элементов, а затем получить соответствующий индексированный элемент из столбцов Listview для извлечения объекта ColumnHeader, который был dblclicked (независимо от переназначения столбца во время выполнения) – Anthony
Боже, всем слишком ленив, чтобы отправить код. Для этого есть три способа:
Control.MousePosition
и преобразовать в клиентские координаты.HitTest
, чтобы найти то, что указала мышь. Это возвращает объект с большим количеством информации, кроме фактического номера столбца, поэтому ...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);
}
Если вы не можете заставить это работать, просто скопируйте две последние строки, используя 'e.Location' в событии' MouseDown'! – TaW
Если у вас есть флажок в первом столбце ('ListView.CheckBoxes = true',' FullRowSelect = true'), вы можете использовать 'if (mousePosition.X> = 20) {... toggle checkbox ...} ' – Roland
e.Column фактически содержит индекс
private void lv_ColumnClick(object sender, ColumnClickEventArgs e)
{
Int32 colIndex = Convert.ToInt32(e.Column.ToString());
lv.Columns[colIndex].Text = "new text";
}
' ColumnClick' действителен только для щелчка по столбцу __headers__ – TaW
привет Тим ... спасибо за ответ ... может вы предоставить мне код – Sathish
Сатиш - это одна строка кода; он имеет вызов listView.HitTest; вам нужно будет указать координаты X и Y щелчка мыши. –
Одна строка кода не должна быть такой трудной для записи, особенно. с советами Тима. – IAbstract