Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TreeNode单击与TreeView单击_C#_Winforms_Treeview_Nodes_Contextmenustrip - Fatal编程技术网

C# TreeNode单击与TreeView单击

C# TreeNode单击与TreeView单击,c#,winforms,treeview,nodes,contextmenustrip,C#,Winforms,Treeview,Nodes,Contextmenustrip,我有一个树景,我需要两样东西 单击特定节点时的右键单击支持 如果单击树上的任何其他位置(没有节点),则支持右键单击 这两个选项都会给我一个不同的ContextMenuStrip 我的两个程序现在支持这两种类型的点击 特定节点单击: var someNode = e.Node.Tag as SomeNode; if (someNode != null) { someContextMenu.Show(someTree, e.Location); return; } 在树上的任意位置

我有一个树景,我需要两样东西

  • 单击特定节点时的右键单击支持
  • 如果单击树上的任何其他位置(没有节点),则支持右键单击
这两个选项都会给我一个不同的
ContextMenuStrip

我的两个程序现在支持这两种类型的点击

特定节点单击:

var someNode = e.Node.Tag as SomeNode;
if (someNode != null)
{
   someContextMenu.Show(someTree, e.Location);
   return;
}
在树上的任意位置单击:

问题在于,在检查我是否单击了节点或树视图中的空白点之前,树上任何位置的
单击
事件都将触发

你知道我该如何改变这种行为吗?

假设你问的是winforms

您可以使用返回的方法,在该方法中,您可以知道是否命中节点

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)而不是treeviewhitestinfo类。

对不起,我们忘记了标记。我试试这个