2010-03-04 25 views

Respuesta

4

El control ListView tiene un método HitTest. Usted le otorga las coordenadas xey del evento de clic del mouse y le da un objeto que le dice la fila (elemento de vista de lista) y la columna (subtema de vista de lista) en ese punto.

+0

hi Tim ... gracias por responder ... ¿Me podría proporcionar el código – Sathish

+0

Sathish - es una línea de código; tiene una llamada a listView.HitTest; Tendrás que proporcionar las coordenadas X e Y del clic del mouse. –

+0

Una línea de código no debería ser tan difícil de escribir, esp. con los consejos que Tim proporcionó. – IAbstract

0

Este es el código VB.NET, pero los objetos deben ser iguales.

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

si desea que se haga clic en la columna que fue (Single) usar el evento Columnclick. Del código anterior, podría imaginar que podría obtener el índice del subelemento de la matriz de elementos secundarios, luego obtener el elemento indexado correspondiente de las columnas de Listview para recuperar el objeto ColumnHeader que fue dblclicked (sin importar el reordenamiento de columna en tiempo de ejecución)) – Anthony

15

Todos somos demasiado perezosos para publicar el código. Hay tres pasos para el proceso:

  1. Obtenga la posición del mouse con Control.MousePosition y conviértala en las coordenadas del cliente.
  2. Llame a la función HitTest para encontrar a qué apunta el mouse. Esto devuelve un objeto con mucha información, excepto el número de columna real, así que ...
  3. Busque en la matriz de subtemas usando IndexOf para encontrar el número de columna.

Aquí está el código:

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

¡Si no puede hacer que esto funcione, simplemente codifique las dos últimas líneas usando 'e.Location' en el evento' MouseDown'! – TaW

+0

Si tiene una casilla en la primera columna ('ListView.CheckBoxes = true',' FullRowSelect = true') puede utilizar 'if (mousePosition.X> = 20) {... toggle checkbox ...} ' – Roland

0

la e.Column lleva a cabo realmente el índice

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

    } 
+1

' ColumnClick' solo es válido para hacer clic en la columna __headers__ – TaW

Cuestiones relacionadas