TreeNode A Destra Fare Clic Su Opzione

Sto lavorando TreeView e TreeView.I nodi nel mio C# GUI dell’applicazione e si desidera utilizzare il tasto destro del mouse funzionalità di un paio di nodi nel mio albero. Ho cercato un po ‘ ma sembra che il SelectedNode è valido solo per fare clic a sinistra e non c’è nulla di catturare il tasto destro del mouse su un nodo. Voglio aggiungere funzionalità come ‘Aggiungi’, ‘Elimina’, ‘Rinomina’, etc. i nodi al momento giusto cliccato su. Una guida per favore?

Grazie,
Viren

Se si utilizza Windows Form o WPF?
Sì windows form. Scusate ho dimenticato di dire che. E Visual Studio 2005.

OriginaleL’autore zack | 2009-09-18

2 Replies
  1. 6

    Aggiungere un gestore per MouseUp.
    Il gestore, controllare il args per il tasto destro del mouse, di ritorno se non.
    Chiamata treeView.GetNodeAt() con le coordinate del mouse per trovare il nodo.
    Creare un menu di contesto.

    Qui c’è qualcosa di simile per una lista di controllo che può essere adattato per un controllo TreeView:

            private void listJobs_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    int index = listJobs.IndexFromPoint(e.Location);
                    if (index != ListBox.NoMatches)
                    {
                        listJobs.SelectedIndex = index;
    
                        Job job = (Job)listJobs.Items[index];
    
                        ContextMenu cm = new ContextMenu();
    
    
                        AddMenuItem(cm, "Run", QueueForRun, job).Enabled = !job.Pending;
                        AddMenuItem(cm, "Cancel run", CancelQueueForRun, job).Enabled = (job.State == JobState.Pending || job.State == JobState.Running);
                        AddMenuItem(cm, "Open folder", OpenFolder, job);
    
                        cm.Show(listJobs, e.Location);
                    }
                }
            }
    
            private MenuItem AddMenuItem(ContextMenu cm, string text, EventHandler handler,     object context)
            {
                MenuItem item = new MenuItem(text, handler);
                item.Tag = context;
                cm.MenuItems.Add(item);
                return item;
            }

    Potrebbe essere necessario utilizzare PointToClient o PointToScreen nel modulo per convertire le coordinate in modo appropriato. Ben presto ci si accorge se hai bisogno di loro quando compare il menu di contesto nel posto sbagliato.

    Ho provato ad utilizzare il tuo codice e non funziona. Modificare il codice per fare i miei più semplice inizialmente come segue: void treeView1_MouseUp(object sender, MouseEventArgs e) { if (e.Pulsante == MouseButtons.Diritto) { treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); Console.WriteLine(“Diritto Cliccato”); } } Anche questo semplice pezzo di codice non sembra funzionare. Potete per favore indicare l’esatto problema. Per fare un nodo nell’albero doesnt anche selezionare il nodo.
    Ehi, grazie Scott. Funziona bene ora. Ho dimenticato di registrare la mia auto scritto gestore di eventi con il mio GUI form dell’applicazione. Il mio male.
    Bel lavoro. Sono contento che hai risolto.

    OriginaleL’autore Scott Langham

  2. 0

    Utilizzare il ContextMenuStrip proprietà sulla TreeView per aggiungere un menu di contesto. Se hai bisogno di non visualizzare il menu per alcuni dei nodi, è in grado di gestire il ContextMenuStrip dell’evento di Apertura per la cancellazione dal manifestarsi — o, è possibile disabilitare alcune funzioni di menu opzioni da lì.

    Edit: per afferrare il nodo sotto il mouse, gestire l’evento MouseUp sulla TreeView, e utilizzare questo codice:

    TreeNode nodeUnderMouse = tvMyTreeView.GetNodeAt(e.X, e.Y);
    MouseUp attiva solo dopo l’evento di apertura, così che non funziona. Sembra che ci sia alcun modo per adattare il menu di contesto incorporati nella struttura ad albero prima di essere mostrato.

    OriginaleL’autore Jon Seigel

Lascia un commento