Как я могу отключить переименование узла для TreeView в WinForms? - PullRequest
5 голосов
/ 06 февраля 2011

Можно ли отключить опцию перехода в режим "Переименовать" при нажатии на узел дерева?
Я не хочу полностью отключать переименование, только чтобы не допустить этого, нажав на узел.

Ответы [ 2 ]

6 голосов
/ 06 февраля 2011

Я не знаю, почему вы изменили бы поведение по умолчанию, но в любом случае вот возможное решение для редактирования узлов с 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();
            }
        }
4 голосов
/ 06 февраля 2011

При необходимости вам придется включать и выключать свойство LabelEdit:

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

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

Обратите внимание, что это имеет побочные эффекты, свойство LabelEdit является флагом стиля для собственного элемента управления Windows.Чтобы изменить его, нужно полностью разрушить окно и заново создать его с нуля.Наиболее заметным побочным эффектом является небольшое мерцание, когда окно перерисовывается после создания.Могут быть и другие, я сам не видел, чтобы что-то пошло не так.

...