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类。对不起,我们忘记了标记。我试试这个