Ответ 1
Наконец, я нашел решение для этого на CodeProject. Среди комментариев внизу, вы также найдете портативное решение.
У меня есть 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", но текстовое поле редактирования не отображается.
Любые идеи? Благодаря
Наконец, я нашел решение для этого на CodeProject. Среди комментариев внизу, вы также найдете портативное решение.
Хех - я ударил это один несколько лет назад. Я даже оставил предложение на Connect (проголосуйте за него!), Чтобы разрешить замену ярлыка в BeforeLabelEdit.
Один вариант (в WinForms - это другая история в WPF) заключается в использовании пользовательской раскраски для ваших TreeNodes, чтобы фактическая метка по-прежнему была "Foo", и пользовательский нарисовал "(1234)" после нее. Это немного боль, чтобы получить право, хотя.