如何在WinForms中禁用TreeView的节点重命名?

时间:2011-02-06 11:04:16

标签: c# winforms treeview rename

单击树节点时是否可以禁用进入“重命名”模式的选项?
我不想完全禁用重命名,只是不允许通过单击节点来执行此操作。

2 个答案:

答案 0 :(得分:6)

我不知道你为什么会改变默认行为,但无论如何这里是一个可能的解决方案来编辑​​LabelEdit设置为true的节点。

除非您的具体操作发生,否则只需捕获BeforeLabelEdit事件并取消它即可。以下代码为F2键按下执行此操作:

        bool _allowNodeRenaming;

        private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (!_allowNodeRenaming)
            {
                e.CancelEdit = true;
            }

            _allowNodeRenaming = false;
        }

        private void treeView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F2)
            {
                _allowNodeRenaming = true;
                treeView1.SelectedNode.BeginEdit();
            }
        }

答案 1 :(得分:4)

您必须根据需要打开和关闭LabelEdit属性:

    private void startLabelEdit() {
        treeView1.LabelEdit = true;
        treeView1.SelectedNode.BeginEdit();
    }

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
        treeView1.LabelEdit = false;
    }

请注意,这有副作用,LabelEdit属性是本机Windows控件的样式标志。更改它需要完全破坏窗口并从头开始重新创建它。当窗口在创建后重绘自身时,最明显的副作用是小闪烁。可能还有其他的,我自己没有看到任何问题。