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

时间:2010-07-02 14:36:00

标签: winforms treeview contextmenu

我有树视图和为每个节点显示的上下文菜单。 一个节点有选择。我现在用鼠标移动到另一个节点,然后用鼠标右键单击打开上下文菜单。现在存在的问题是选择仍在旧的新节点上。 如果用户之前没有通过鼠标单击选择选择节点,如何防止菜单弹出?换句话说,我怎样才能实现用户必须通过正常的鼠标点击选择treenode,或者treenode自动点击鼠标右键选择treenode。

3 个答案:

答案 0 :(得分:2)

请尝试以下代码,该代码为您提供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;
}                   

答案 1 :(得分:1)

上下文菜单中有一个事件:

http://msdn.microsoft.com/en-us/library/ms229721.aspx

这是一个可取消的事件。换句话说,测试你是否有一个选定的节点,如果不这样做就取消该事件 - 它将阻止你的菜单显示。

答案 2 :(得分:0)

我创建了上下文菜单,并将其分配给设计器中的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);
}