Trovo che il comportamento di selezione del comportamento di Windows Vista standard sia piuttosto fastidioso. Ad esempio, se si utilizza Esplora risorse e si fa clic con il pulsante destro del mouse su un nodo e si preme Proprietà, viene evidenziato il nodo e viene visualizzata la finestra di dialogo delle proprietà per il nodo su cui si è fatto clic. Ma quando si ritorna dalla finestra di dialogo, il nodo evidenziato era il nodo precedentemente selezionato/evidenziato prima di fare clic con il tasto destro. Trovo che questo causi problemi di usabilità perché sono sempre confuso dal fatto che io abbia agito sul nodo giusto.
Quindi in molte delle nostre GUI, cambiamo il nodo dell'albero selezionato con un clic destro, in modo che non ci sia confusione. Questo potrebbe non essere lo stesso di un'app standard di iwndos come Explorer (e io tendo a modellare fortemente il comportamento della GUI dopo le app per finestre standard per motivi di utilità), credo che questo caso di eccezione si traduca in alberi molto più utilizzabili.
Ecco alcuni codice che cambia la selezione durante il tasto destro del mouse:
private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// only need to change selected note during right-click - otherwise tree does
// fine by itself
if (e.Button == MouseButtons.Right)
{
Point pt = new Point(e.X, e.Y);
tree.PointToClient(pt);
TreeNode Node = tree.GetNodeAt(pt);
if (Node != null)
{
if (Node.Bounds.Contains(pt))
{
tree.SelectedNode = Node;
ResetContextMenu();
contextMenuTree.Show(tree, pt);
}
}
}
}
fonte
2008-12-11 21:10:43
Grazie mille, ho una piccola aggiunta alla soluzione: Puoi anche utilizzare l'evento "_NodeMouseClick" che ti dà un "TreeNodeMouseClickEventArgs e" nel qual caso puoi semplicemente usare il nodo e.Node e non hai preoccuparsi di controllare se il nodo è nullo o no. – SDM
Ho ottenuto il risultato desiderato con l'evento MouseDown invece di MouseUp. – Javier