У меня есть древовидное представление с такими узлами: «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», но текстовое поле редактирования не появляется.
Есть идеи? Спасибо





Хех - я столкнулся с этим несколько лет назад. Я даже оставил предложение о подключении (проголосуйте за него!), Чтобы разрешить изменение метки в BeforeLabelEdit.
Один из вариантов (в WinForms - это другая история в WPF) - использовать настраиваемое рисование для ваших TreeNodes, чтобы фактическая метка по-прежнему была «Foo», а вы настраивали «(1234)» после нее. Хотя это немного больно.
Наконец, я нашел решение к этому на CodeProject. Среди комментариев внизу вы также найдете портативное решение.
Спасибо за ответ, попробую сделать с нестандартной росписью. И конечно проголосовал за ваше предложение :)