2010-03-04 17 views

risposta

4

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.

+0

hi Tim ... grazie per la risposta ... Potete prego fornire il codice – Sathish

+0

Sathish: è una linea di codice; ha una chiamata a listView.HitTest; dovrai fornire le coordinate X e Y del clic del mouse. –

+0

Una riga di codice non dovrebbe essere così difficile da scrivere, esp. con le punte fornite da Tim. – IAbstract

0

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 
+1

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

15

Cavolo, tutti sono troppo pigro per inviare il codice. Ci sono tre passaggi per il processo:

  1. Ottenere la posizione del mouse utilizzando Control.MousePosition e convertire in coordinate del client.
  2. Chiamare la funzione HitTest per individuare il puntatore del mouse. Ciò restituisce un oggetto con molte informazioni eccetto il numero effettivo della colonna, quindi ...
  3. Cerca l'array di sottotitoli utilizzando 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); 
} 
+0

Se non riesci a farlo funzionare, codifica semplicemente le ultime due righe utilizzando 'e.Location' nell'evento' MouseDown'! – TaW

+0

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

0

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"; 

    } 
+1

' ColumnClick' è valido solo per fare clic sulla colonna __headers__ – TaW

Problemi correlati