Muszę kolumna kliknięciu w ListView w C#Ustal kliknięciu kolumny w ListView
Mam przykładowy kod z How to determine the clicked column index in a Listview, ale nie jestem pewien, w jaki sposób należy je wdrożyć.
Muszę kolumna kliknięciu w ListView w C#Ustal kliknięciu kolumny w ListView
Mam przykładowy kod z How to determine the clicked column index in a Listview, ale nie jestem pewien, w jaki sposób należy je wdrożyć.
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.
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
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
Jezu, wszyscy są zbyt leniwi, aby opublikować kod. Proces składa się z trzech etapów:
Control.MousePosition
i przekonwertuj na współrzędne klienta.HitTest
, aby dowiedzieć się, na co wskazuje mysz. Zwraca obiekt z dużą ilością informacji oprócz faktycznego numeru kolumny, wię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);
}
Jeśli nie możesz tego uruchomić, po prostu skopiuj dwie ostatnie linie używając 'e.Location' w zdarzeniu' MouseDown'! – TaW
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
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";
}
' ColumnClick' jest prawidłowe tylko dla kliknięcia kolumny __headers__ – TaW
hi Tim ... dzięki za odpowiedzi ... może Pan podać mi kod – Sathish
Sathish - to jedna linia kodu; ma wywołanie listView.HitTest; musisz podać współrzędne X i Y kliknięcia myszą. –
Jedna linia kodu nie powinna być trudna do napisania, szczególnie. ze wskazówkami Tima. – IAbstract