2010-03-04 3 views

ответ

4

Управление ListView имеет метод HitTest. Вы даете ему x- и y-координаты события щелчка мыши, и он дает вам объект, который сообщает вам строку (элемент списка) и столбец (подкласс списка) в этой точке.

+0

привет Тим ​​... спасибо за ответ ... может вы предоставить мне код – Sathish

+0

Сатиш - это одна строка кода; он имеет вызов listView.HitTest; вам нужно будет указать координаты X и Y щелчка мыши. –

+0

Одна строка кода не должна быть такой трудной для записи, особенно. с советами Тима. – IAbstract

0

Это код 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 
+1

, если вы хотите, чтобы столбец (Single) щелкнул, используйте событие Columnclick. Из вышеприведенного кода я мог представить, что вы можете получить индекс подэлемента из массива subitem элементов, а затем получить соответствующий индексированный элемент из столбцов Listview для извлечения объекта ColumnHeader, который был dblclicked (независимо от переназначения столбца во время выполнения) – Anthony

15

Боже, всем слишком ленив, чтобы отправить код. Для этого есть три способа:

  1. Получить координаты мыши с помощью Control.MousePosition и преобразовать в клиентские координаты.
  2. Вызовите функцию HitTest, чтобы найти то, что указала мышь. Это возвращает объект с большим количеством информации, кроме фактического номера столбца, поэтому ...
  3. Найти массив подэлементов, используя 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); 
} 
+0

Если вы не можете заставить это работать, просто скопируйте две последние строки, используя 'e.Location' в событии' MouseDown'! – TaW

+0

Если у вас есть флажок в первом столбце ('ListView.CheckBoxes = true',' FullRowSelect = true'), вы можете использовать 'if (mousePosition.X> = 20) {... toggle checkbox ...} ' – Roland

0

e.Column фактически содержит индекс

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

    } 
+1

' ColumnClick' действителен только для щелчка по столбцу __headers__ – TaW

Смежные вопросы