2012-03-22 21 views
26

Ho cercato per un po 'un semplice menu di scelta rapida per un singolo elemento. Ad esempio, se clicco con il tasto destro su un'immagine, voglio che un piccolo menu mostri le mie etichette: Aggiungi, Rimuovi ecc. Se qualcuno potesse aiutarti, sarei molto grato.Aggiunta di un menu di scelta rapida con un elemento

Grazie per la ricerca.

Ecco il codice 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; 

risposta

54

Aggiungere un menu contestuale per il modulo e quindi assegnare in proprietà del controllo sotto ContextMenuStrip. Spero che questo ti aiuti :).

Spero che questo aiuti:

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

pictureBox1.ContextMenu = cm; 
+0

Perfetto grazie! Mi stavo preparando a saltare ... – Marshal

+0

Prego;). –

+2

Domanda veloce quindi che può sembrare stupida. Come potrei quindi aggiungere delle funzioni a quegli oggetti? – Marshal

17

Questa è una risposta esauriente a questa domanda. L'ho fatto perché questa pagina è in cima ai risultati di ricerca di Google e la risposta non è sufficientemente dettagliata. Questo post presuppone che tu sia competente nell'uso dei moduli di Visual Studio C#. Questo è basato su VS2012.

  1. Iniziare semplicemente trascinando un ContextMenuStrip nel modulo. Lo inserirà nell'angolo in alto a sinistra in cui è possibile aggiungere le voci del menu e rinominarlo come meglio credi.

  2. Dovrai visualizzare il codice e inserire un evento sul modulo. Creazione di un mouse evento per l'oggetto in questione e quindi assegnare un diritto evento click per esso in questo modo (che ho chiamato il 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. Assegnare il gestore di eventi manualmente al form.designer (potrebbe essere necessario aggiungere un "usando" per System.Windows.Forms; si può solo risolverlo):

    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown); 
    
  4. Tutto ciò che è necessario a questo punto è semplicemente fare doppio clic ogni voce di menu e fare il operazioni desiderate per ogni evento click nello stesso modo in cui si farebbe per qualsiasi altro pulsante.

Questo è il codice di base per questa operazione. Ovviamente puoi modificarlo per adattarlo alle tue pratiche di codifica.

+0

ottima risposta! Potresti anche aver utilizzato una dichiarazione if If (e.Button == MouseButtons.Right) –

+2

A meno che qualcosa non sia cambiato da quando è stata pubblicata questa risposta, non è necessario specificare manualmente un evento 'MouseDown' nel codice. Tutto quello che devi fare è impostare la proprietà 'ContextMenuStrip' sul' ContextMenuStrip' corretto per il controllo con cui vuoi associarlo. Questo taglia i passaggi 2 e 3 (sebbene aggiunga un passo 2 molto più piccolo) alla soluzione. –

10

Se si utilizza Visual Studio, c'è una soluzione GUI così:

  1. Da Toolbox aggiungere un ContextMenuStrip
  2. Selezionare il menu contestuale e aggiungere gli elementi tasto destro del mouse
  3. Per ogni elemento imposta gli eventi click alle funzioni corrispondenti
  4. Seleziona il modulo/pulsante/immagine/ecc (qualsiasi elemento) che verrà collegato al menu del tasto destro del mouse
  5. Impostare la proprietà ContextMenuStrip sul menu creato.
0

Avendo appena fatto un casino, è utile sapere che e.X/e.I punti Y sono relativi al controllo, quindi se (come lo ero io) si aggiunge un menu di scelta rapida a un listview o qualcosa di simile, si vorrà regolarlo con l'origine del modulo. Nell'esempio qui sotto ho aggiunto 20 a x/y in modo che il menu appaia leggermente a destra e sotto il cursore.

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