TreeNode单击与TreeView单击

时间:2012-08-29 19:27:36

标签: c# winforms treeview nodes contextmenustrip

我有一个TreeView,我需要两件事。

  • 如果单击特定节点,则单击右键单击支持。
  • 如果我点击树上的任何其他位置(没有节点),请单击右键支持。

这两个选项都会给我一个不同的ContextMenuStrip 我的两个程序现在支持这种类型的点击。

特定节点点击:

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

树上的任何地方点击:

enter image description here

问题是Anywhere on the tree click事件会在检查我是否点击节点TreeView的空白点之前触发。
任何想法我怎么能改变这种行为?

2 个答案:

答案 0 :(得分:2)

假设你在询问winforms。

您可以使用TreeView.HitTest方法返回TreeViewHitTestInfo,您可以知道是否有节点。

答案 1 :(得分: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类。