2011-01-24 13 views
18

Sto tentando di visualizzare un menu popup sulla mia vista ad albero quando gli utenti fanno clic con il pulsante destro del mouse, consentendo loro di scegliere azioni sensibili al contesto da applicare al nodo selezionato.Fare clic con il pulsante destro del mouse su .Net TreeNode

Al momento l'utente deve fare clic sul nodo sinistro e quindi fare clic con il pulsante destro del mouse per scegliere.

È possibile fare clic con il tasto destro su un nodo per selezionare quel nodo, e in tal caso qual è il metodo migliore per farlo.

risposta

39

Sia click sinistro e destro sparare un evento click e causare la selezione per cambiare. Tuttavia, in determinate circostanze (che non ho ancora preso la briga di rintracciare) la selezione cambierà dal nodo che è stato fatto clic con il tasto destro sul nodo selezionato inizialmente.

Al fine di assicurarsi che il tasto destro del mouse cambia la selezione, è possibile con la forza cambiare il nodo selezionato utilizzando l'evento MouseDown:

treeView.MouseDown += (sender, args) => 
    treeView.SelectedNode = treeView.GetNodeAt(args.X, args.Y); 

Un po 'meglio, come uno degli altri manifesti sottolineato, è quello di utilizzare l'evento NodeMouseClick:

treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node; 
+4

Accetto. Semplicemente aggiungendo questo codice al costruttore del mio Form ho fatto il trucco per me. Grazie. –

+0

Un problema che ho riscontrato con l'approccio NodeMouseClick è che modifica il nodo selezionato alla fine dell'evento NodeMouseClick. Quindi, per i miei scopi, volevo che il nodo selezionato cambiasse prima che fosse visualizzato qualsiasi menu di scelta rapida. Per farlo, ho dovuto usare l'approccio MouseDown. – cigarman

+0

Sì Coleman. Aggiungo la validazione: if (e.Button == MouseButtons.Right) ... (costo inferiore) – harveyt

15

sì. Qui sta elaborando per NodeMouseClick evento:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
     treeView1.SelectedNode = e.Node; 
} 
3

trascinare una striscia menu contestuale nel form poi:

private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     // Display context menu for eg: 
     ContextMenu1.Show(); 
    } 
} 
Problemi correlati