2012-08-29 4 views
1

У меня есть TreeView, и мне нужны две вещи.TreeNode click vs TreeView click

  • Поддержка правой кнопки мыши, если я нажимаю на определенный узел.
  • Поддержка правой кнопки мыши, если я щелкнул в другом месте дерева (где нет узлов).

Эти два варианта дали бы мне другое ContextMenuStrip.
Две мои программы теперь поддерживают оба типа кликов.

конкретный узел нажмите:

var someNode = e.Node.Tag as SomeNode; 
if (someNode != null) 
{ 
    someContextMenu.Show(someTree, e.Location); 
    return; 
} 

Anywhere на дерево мышей:

enter image description here

Проблема заключается в том, что Anywhere on the tree click события будет срабатывать перед проверкой, если я нажал на узле или на пустое место от TreeView.
Любая идея, как я могу изменить это поведение?

ответ

2

Предполагая, что вы спрашиваете о winforms.

Вы можете использовать метод TreeView.HitTest, который возвращает TreeViewHitTestInfo, где вы можете узнать, попали ли вы в узел или нет.

+0

oups забыл тег, извините. Я попробую это – phadaphunk

0
private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Right) 
    { 
     TreeViewHitTestInfo info = treeView1.HitTest(e.Location); 
     treeView1.SelectedNode = info.Node; 

     if (info.Node == null) 
     { 
      contextMenuStrip1.Show(Cursor.Position); 
     } 
     else 
     { 
      contextMenuStrip2.Show(Cursor.Position); 
     } 
    } 
} 

или событие для мыши в зависимости от ваших потребностей. Также вы можете использовать GetNodeAt (e.Location) вместо класса TreeViewHitTestInfo.