Подтвердить что ты не робот

Вопрос редактирования метки TreeView

У меня есть treeview с такими узлами: "Foo (1234)", и вы хотите разрешить пользователю переименовывать узлы, но только часть Foo, без (1234). Сначала я попытался изменить текст node в BeforeLabelEdit следующим образом:

private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    e.Node.Text = "Foo";
}

Но когда я нажимаю на node для его редактирования, в текстовом поле появляется "Foo (1234)".

Хорошо, тогда попробуй что-нибудь еще.

Я установил treeView1.LabelEdit в значение false, а затем сделаю следующее:

private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (treeView1.SelectedNode == treeView1.GetNodeAt(e.Location))
        {
            treeView1.SelectedNode.Text = "Foo";
            treeView1.LabelEdit = true;
            treeView1.SelectedNode.BeginEdit();
        }
    }
}

И затем в AfterLabelEdit, я установил LabelEdit обратно в значение false.

И угадайте, что? Это тоже не работает. Он изменяет текст node на "Foo", но текстовое поле редактирования не отображается.

Любые идеи? Благодаря

4b9b3361

Ответ 1

Наконец, я нашел решение для этого на CodeProject. Среди комментариев внизу, вы также найдете портативное решение.

Ответ 2

Хех - я ударил это один несколько лет назад. Я даже оставил предложение на Connect (проголосуйте за него!), Чтобы разрешить замену ярлыка в BeforeLabelEdit.

Один вариант (в WinForms - это другая история в WPF) заключается в использовании пользовательской раскраски для ваших TreeNodes, чтобы фактическая метка по-прежнему была "Foo", и пользовательский нарисовал "(1234)" после нее. Это немного боль, чтобы получить право, хотя.