2012-03-22 42 views
26

He estado buscando durante un tiempo un simple menú contextual para un solo elemento. Por ejemplo, si hago clic con el botón derecho en una imagen, quiero que aparezca un pequeño menú con mis propias etiquetas: Agregar, Eliminar, etc. Si alguien pudiera ayudar, me sentiría muy agradecido.Agregar un menú contextual a un elemento

Gracias por mirar.

Aquí está el código completo:

ContextMenu cm = new ContextMenu();    
    cm.MenuItems.Add("Item 1", new EventHandler(Removepicture_Click));    
    cm.MenuItems.Add("Item 2", new EventHandler(Addpicture_Click));    
    pictureBox1.ContextMenu = cm; 

Respuesta

54

Agregar un menú contextual a su forma y luego asignar en las propiedades del control bajo ContextMenuStrip. Espero que esto ayude :).

Espero que esto ayude:

ContextMenu cm = new ContextMenu(); 
cm.MenuItems.Add("Item 1"); 
cm.MenuItems.Add("Item 2"); 

pictureBox1.ContextMenu = cm; 
+0

Perfecto gracias! Estaba preparándose para saltar ... – Marshal

+0

De nada;). –

+2

Pregunta rápida que puede parecer estúpida. ¿Cómo podría agregar funciones a esos artículos? – Marshal

17

Ésta es una respuesta completa a esta pregunta. Lo he hecho porque esta página ocupa un lugar destacado en los resultados de búsqueda de Google y la respuesta no entra en detalles suficientes. Esta publicación asume que eres competente en el uso de formularios de Visual Studio C#. Esto se basa en VS2012.

  1. Comience simplemente arrastrando un ContextMenuStrip en el formulario. Simplemente lo colocará en la esquina superior izquierda donde puede agregar los elementos del menú y cambiarle el nombre como mejor le parezca.

  2. Deberá ver el código e ingresar en un evento usted mismo en el formulario. Crear un evento del ratón para el elemento en cuestión y luego asignar un evento de clic derecho para ello como tal (que he llamado el ContextMenuStrip "rightClickMenuStrip"):

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
    switch (e.Button) 
        { 
         case MouseButtons.Right: 
         { 
          rightClickMenuStrip.Show(this, new Point(e.X, e.Y));//places the menu at the pointer position 
         } 
         break; 
        } 
    } 
    
  3. asignar el controlador de eventos manualmente a la form.designer (puede que tenga que añadir un "uso" para System.Windows.Forms; usted sólo puede resolverlo):

    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown); 
    
  4. Todo lo que se necesita en este momento es simplemente haga doble clic en cada elemento del menú y hacer lo operaciones deseadas para cada evento de clic de la misma manera que lo haría con cualquier otro botón.

Este es el código básico para esta operación. Obviamente, puede modificarlo para que se ajuste a sus prácticas de codificación.

+0

¡excelente respuesta! También podría haber utilizado una instrucción if If (e.Button == MouseButtons.Right) –

+2

A menos que algo haya cambiado desde que se publicó esta respuesta, no es necesario especificar manualmente un evento 'MouseDown' en el código. Todo lo que tiene que hacer es establecer la propiedad 'ContextMenuStrip' en el' ContextMenuStrip' correcto para el control al que desea asociarlo. Esto corta los pasos 2 y 3 (aunque agrega un paso 2 mucho más pequeño) a su solución. –

10

Si está utilizando Visual Studio, hay una solución interfaz gráfica de usuario, así:

  1. caja de herramientas agregar un ContextMenuStrip
  2. Seleccionar el menú contextual y añadir el botón derecho artículos
  3. Para cada elemento establecer los eventos de clic a las funciones correspondientes
  4. Seleccione la forma/botón/imagen/etc. (cualquier elemento) que el menú del botón derecho se conectará
  5. Establezca su propiedad ContextMenuStrip en el menú que ha creado.
0

Después de haberme equivocado con esto, es útil saber que el e.X/e.Los puntos Y son relativos al control, de modo que si (como yo lo hice) está agregando un menú contextual a una vista de lista o algo similar, querrá ajustarlo con el origen del formulario. En el siguiente ejemplo, he agregado 20 a la x/y para que el menú aparezca ligeramente a la derecha y debajo del cursor.

cmDelete.Show(this, new Point(e.X + ((Control)sender).Left+20, e.Y + ((Control)sender).Top+20)); 
Cuestiones relacionadas