【问题标题】:ContextMenuStrip for wrong item in TreeViewTreeView 中错误项目的 ContextMenuStrip
【发布时间】:2012-06-13 19:28:17
【问题描述】:

我有一个 TreeView,其中所有节点都分配了相同的 ContextMenuStrip。

当我右键单击已选择的以外的 TreeNode,然后在 ContextMenuStrip 中选择一个项目时,treeView1.SelectedNode 用于右键单击之前选择的节点,而不是右键单击的项目。

如何更改此行为,以便在显示 ContextMenuStrip 之前正确选择右键单击的节点?

private void newGroupToolStripMenuItem_Click(object sender, EventArgs e)
{
    TextFieldDialog t = new TextFieldDialog("New Order Group", "Enter the name of the new group");
    t.ShowDialog();
    if (t.DialogResult == DialogResult.OK)
    {
        int lastid = db.NewOrderGroup(t.Value, (int)treeView1.SelectedNode.Tag);
        TreeNode node = new TreeNode(t.Value);
        node.Tag = lastid;
        treeView1.SelectedNode.Nodes.Add(node);
    }
}

在上面的代码中(int)treeView1.SelectedNode.Tag返回的是我右键之前选择的节点的标签,而不是右键点击的节点。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    这是TreeView的一个怪癖,只有鼠标左键选择一个节点。重置 ContextMenuStrip 属性并注意行为,当您右键单击时,突出显示会跳转到单击的节点,但在您释放按钮后会立即跳回。

    通过实现 NodeMouseClick 事件的事件处理程序来修复它。选择节点并显示上下文菜单,如下所示:

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
        if (e.Button == MouseButtons.Right) {
            treeView1.SelectedNode = e.Node;
            contextMenuStrip1.Show(treeView1, e.Location);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多