Вопрос редактирования ярлыка TreeView - PullRequest
12 голосов
/ 08 октября 2008

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

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

Но когда я щелкаю узел, чтобы отредактировать его, в текстовом поле появляется «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.

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

Есть идеи? Спасибо

Ответы [ 2 ]

5 голосов
/ 31 октября 2008

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

4 голосов
/ 08 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...