2

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

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

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

具体节点点击:

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

在树上的任何地方单击:

在此处输入图像描述

问题是在Anywhere on the tree click检查我是单击节点还是单击TreeView.
知道如何改变这种行为吗?

4

2 回答 2

2

假设您正在询问winforms。

您可以使用返回 TreeViewHitTestInfo 的 TreeView.HitTest 方法,可以在其中知道是否点击了节点。

于 2012-08-29T19:30:26.703 回答
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 类。

于 2012-08-29T20:18:51.503 回答