ho bisogno di ottenere la colonna cliccato in un controllo ListView in C#Determinare colonna cliccato in ListView
ho qualche codice di esempio da How to determine the clicked column index in a Listview ma non sono sicuro di come dovrei attuarla.
ho bisogno di ottenere la colonna cliccato in un controllo ListView in C#Determinare colonna cliccato in ListView
ho qualche codice di esempio da How to determine the clicked column index in a Listview ma non sono sicuro di come dovrei attuarla.
Il controllo ListView
ha un metodo HitTest
. Gli assegni le coordinate x e y dell'evento clic del mouse e ti dà un oggetto che ti dice la riga (elenco di visualizzazione elemento) e la colonna (elenco di visualizzazione sotto-voce) in quel punto.
Questo è il codice VB.NET, ma gli oggetti devono essere uguali.
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
se vuoi che la colonna che era (Single) cliccata usi l'evento Columnclick. Dal codice precedente potrei immaginare di poter ottenere l'indice del sottotitolo dalla matrice degli elementi secondari, quindi ottenere l'elemento indicizzato corrispondente dalle colonne di Listview per recuperare l'oggetto ColumnHeader che è stato duplicato (indipendentemente dal riordino delle colonne in fase di esecuzione) – Anthony
Cavolo, tutti sono troppo pigro per inviare il codice. Ci sono tre passaggi per il processo:
Control.MousePosition
e convertire in coordinate del client.HitTest
per individuare il puntatore del mouse. Ciò restituisce un oggetto con molte informazioni eccetto il numero effettivo della colonna, quindi ...IndexOf
per trovare il numero di colonna.Ecco il codice:
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);
}
Se non riesci a farlo funzionare, codifica semplicemente le ultime due righe utilizzando 'e.Location' nell'evento' MouseDown'! – TaW
Se si ha una casella di controllo nella prima colonna ('ListView.CheckBoxes = true',' FullRowSelect = true') si potrebbe voler utilizzare 'if (mousePosition.X> = 20) {... commutare la casella di spunta ...} ' – Roland
l'e.Column detiene in realtà l'indice
private void lv_ColumnClick(object sender, ColumnClickEventArgs e)
{
Int32 colIndex = Convert.ToInt32(e.Column.ToString());
lv.Columns[colIndex].Text = "new text";
}
' ColumnClick' è valido solo per fare clic sulla colonna __headers__ – TaW
hi Tim ... grazie per la risposta ... Potete prego fornire il codice – Sathish
Sathish: è una linea di codice; ha una chiamata a listView.HitTest; dovrai fornire le coordinate X e Y del clic del mouse. –
Una riga di codice non dovrebbe essere così difficile da scrivere, esp. con le punte fornite da Tim. – IAbstract