2010-03-04 14 views

Odpowiedz

4

Sterowanie ListView ma metodę HitTest. Dajesz mu współrzędne X i Y zdarzenia kliknięcia myszą, a to daje obiekt, który mówi ci wiersz (element widoku listy) i kolumnę (widok listy podrzędny) w tym punkcie.

+0

hi Tim ... dzięki za odpowiedzi ... może Pan podać mi kod – Sathish

+0

Sathish - to jedna linia kodu; ma wywołanie listView.HitTest; musisz podać współrzędne X i Y kliknięcia myszą. –

+0

Jedna linia kodu nie powinna być trudna do napisania, szczególnie. ze wskazówkami Tima. – IAbstract

0

To jest kod VB.NET, ale obiekty powinny być takie 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 
+1

Jeśli chcesz, aby kolumna, która została (pojedynczo) kliknięta, użyj zdarzenia Columnclick. Z powyższego kodu mogę sobie wyobrazić, że można uzyskać indeks podelementu z tablicy podelementów elementów, a następnie pobrać odpowiedni indeksowany element z kolumn Listview, aby pobrać obiekt ColumnHeader, który został dblclicked (niezależnie od zmiany kolejności kolumn w czasie wykonywania) – Anthony

15

Jezu, wszyscy są zbyt leniwi, aby opublikować kod. Proces składa się z trzech etapów:

  1. Uzyskaj pozycję myszy za pomocą Control.MousePosition i przekonwertuj na współrzędne klienta.
  2. Zadzwoń pod numer HitTest, aby dowiedzieć się, na co wskazuje mysz. Zwraca obiekt z dużą ilością informacji oprócz faktycznego numeru kolumny, więc ...
  3. Wyszukaj tablicę podelementów, używając IndexOf, aby znaleźć numer kolumny.

Oto kod:

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

Jeśli nie możesz tego uruchomić, po prostu skopiuj dwie ostatnie linie używając 'e.Location' w zdarzeniu' MouseDown'! – TaW

+0

Jeśli masz pole wyboru w pierwszej kolumnie ('ListView.CheckBoxes = true',' FullRowSelect = true'), możesz użyć pola 'if (mousePosition.X> = 20) {... toggle checkbox ...} ' – Roland

0

e.Column rzeczywiście posiada indeks

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

    } 
+1

' ColumnClick' jest prawidłowe tylko dla kliknięcia kolumny __headers__ – TaW