Winforms Windows窗体树视图节点上下文菜单问题

Winforms Windows窗体树视图节点上下文菜单问题,winforms,treeview,contextmenu,Winforms,Treeview,Contextmenu,我有treeview和为每个节点显示的上下文菜单。 一个节点具有所选内容。我现在用鼠标移动到另一个节点,并用鼠标右键单击打开上下文菜单。现在出现了一个问题,即选择仍然在旧的新节点上。 如果用户以前没有通过鼠标单击选择来选择节点,如何防止菜单弹出?换句话说,我如何才能实现用户必须先通过普通鼠标单击选择treenode,或者treenode通过鼠标右键单击自动获得选择。上下文菜单有一个事件: 这是一个可取消的活动。换句话说,测试是否有选定的节点,如果没有,则取消事件-它将停止显示菜单。请尝试以下代

我有treeview和为每个节点显示的上下文菜单。 一个节点具有所选内容。我现在用鼠标移动到另一个节点,并用鼠标右键单击打开上下文菜单。现在出现了一个问题,即选择仍然在旧的新节点上。
如果用户以前没有通过鼠标单击选择来选择节点,如何防止菜单弹出?换句话说,我如何才能实现用户必须先通过普通鼠标单击选择treenode,或者treenode通过鼠标右键单击自动获得选择。

上下文菜单有一个事件:


这是一个可取消的活动。换句话说,测试是否有选定的节点,如果没有,则取消事件-它将停止显示菜单。

请尝试以下代码,该代码为您提供了树节点的预选

TreeNode treeNodeAtMousePosition = this.treeView1.GetNodeAt(this.treeView1.PointToClient(Control.MousePosition));
TreeNode selectedTreeNode = this.treeView1.SelectedNode;
if (treeNodeAtMousePosition != null)
{
     if (treeNodeAtMousePosition != selectedTreeNode)
          treeView1.SelectedNode = treeNodeAtMousePosition;
}                   

我创建了上下文菜单并将其分配给设计器中的TreeView控件。然后我将以下代码添加到表单中

private TreeNode _rightclickedNode;

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
    if (e.Button == MouseButtons.Right) {
        _rightclickedNode = e.Node;
    }
}

private void copyAsPathToolStripMenuItem1_Click(object sender, EventArgs e) {
    Clipboard.SetText(_rightclickedNode.FullPath);
}