2011-01-24 7 views
18

Я пытаюсь показать всплывающее меню в своем древовидной структуре, когда пользователи щелкнули правой кнопкой мыши, что позволяет им выбирать контекстно-зависимые действия для применения к выбранному узлу.Щелкните правой кнопкой мыши на .Net TreeNode

На данный момент пользователю необходимо щелкнуть узел узла, а затем щелкнуть правой кнопкой мыши, чтобы выбрать.

Можно ли щелкнуть правой кнопкой мыши по узлу, чтобы выбрать этот узел - и если да, то какой метод лучше всего подходит.

ответ

39

левой и правой щелчки огонь событие щелчка и вызвать выделение изменить. Однако в определенных обстоятельствах (которые я еще не потрудился отслеживать) выбор будет изменяться с узла, который был щелкнул правой кнопкой мыши на первоначально выбранном узле.

Для того, чтобы убедиться, что правая кнопка мыши изменяет выбор, вы можете принудительно изменить выбранный узел с помощью MouseDown события:

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

Немного лучше, как один из других плакатов указывали, следует использовать событие NodeMouseClick:

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

Согласен. Просто добавление этого кода в конструктор моей формы сделало трюк для меня. Спасибо. –

+0

Одна из проблем, с которой я столкнулся с подходом NodeMouseClick, заключается в том, что он изменяет выбранный узел в конце события NodeMouseClick. Поэтому, для моих целей, я хотел, чтобы выбранный узел изменился до отображения контекстного меню. Для этого мне пришлось использовать подход MouseDown. – cigarman

+0

Да Коулман. Я добавляю подтверждение: if (e.Button == MouseButtons.Right) ... (меньше заряда) – harveyt

15

Да. Здесь обработка для NodeMouseClick события:

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

Перетащите полосу из контекстного меню на форму, то:

private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     // Display context menu for eg: 
     ContextMenu1.Show(); 
    } 
} 
Смежные вопросы