2012-03-19 8 views
7

que estoy teniendo mi Listview de la siguiente maneracómo activar el menú contextual para el elemento listview no para encabezados de columna

Header1  Header2  Header3 
    Item1  Item2  Item3 
    Item1  Item2  Item3 
    Item1  Item2  Item3 

He escrito un código para mostrar context menu al hacer clic en el list view pero está mostrando el Context menu en headers demasiado . Necesito mostrar Context menu sólo cuando el usuario hace clic en Items de list view cualquiera puede ayudar a

Este es mi código he escrito en la actualidad

private void listView1_MouseClick(object sender, MouseEventArgs e) 
    { 
     contextMenuStrip1.Show(listView1, e.Location); 
    } 
+3

¿Ha intentado configurar el HeaderStyle como no hacer clic? – kaj

+0

Gracias 'KAJ' resuelto – Vivekh

+0

Todavía la misma cuestión – Vivekh

Respuesta

0

Esto es bastante sucia ... simplemente utilizando la información a la mano . Alguien probablemente venga con una mejor respuesta.

private void listView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Location.Y > headerHeightDefinedEarlier) 
     contextMenuStrip1.Show(listView1, e.Location); 
} 
+0

lo que quiere decir con 'headerHeightDefinedEarlier' – Vivekh

+0

Quise decir que defina headerHeight en algún lugar del código. También podría simplemente reemplazar el código con if (e.Location.Y> 15), pero como dije, está sucio. – maka

0

Debe seleccionar el elemento cuando esté haciendo clic en él. A continuación, puede solicitar los SelectedItems en la lista y obtener el índice elemento seleccionado: listView1.SelectedItems[0].Index

if (listView1.SelectedItems[0].Index == 0) 
return; 
+0

Pensé en esto también. Problema aquí, creo que sería que si primero selecciona un elemento, haga clic con el botón derecho en el encabezado, el menú contextual aún se mostrará porque aún tiene seleccionado el elemento anterior. – maka

+0

Debe seleccionar el elemento en el evento SelectedIndexChanged – mggSoft

5

puede cancelar la visualización del menú de contexto si no hay elementos seleccionados, que será válida sólo si hace clic derecho un artículo

/// <summary> 
    /// ContextMenuStrip Opening Action 
    /// </summary> 
    private void listContextMenuStrip_Opening(object sender, CancelEventArgs e) 
    { 
     // If there are no items selected, cancel viewing the context menu 
     if (connectionListView.SelectedItems.Count <= 0) 
     { 
      e.Cancel = true; 
     } 
    } 
+3

+1 para usar este evento. Más compatible con el teclado que dependiendo de un clic del mouse. – James

13

¿Qué le parece esto?

private void listView1_MouseClick(object sender, MouseEventArgs e) 
    { 
     ListView listView = sender as ListView; 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      ListViewItem item = listView.GetItemAt(e.X, e.Y); 
      if (item != null) 
      { 
       item.Selected = true; 
       contextMenuStrip1.Show(listView , e.Location); 
      } 
     } 
    } 

Esto lo configura así que el menú contextual sólo muestra si el botón derecho del ratón pasa sobre un elemento, ya que si el botón derecho del ratón pasa sobre un encabezado o alguna otra cosa a continuación, el artículo será nula. Espero que ayuda

9

Esto podría ser útil para usted

private void listView1_MouseClick(object sender, MouseEventArgs e) 
    {    
     if (e.Button == MouseButtons.Right) 
     { 
      if (listView1.FocusedItem.Bounds.Contains(e.Location) == true) 
      { 
       contextMenuStrip1.Show(Cursor.Position); 
      } 
     } 
    } 

El "Bounds" la propiedad es un rectángulo que representa los bordes de la "FocusedItem" en píxeles. Entonces, si el cursor está en esta área rectangular cuando el mouse hace clic derecho, aparece el mensaje "contextMenuStrip1".

Cuestiones relacionadas