C # Как заменить выбранный текст узла, не удаляя дочерний узел в древовидном представлении?

введите описание изображения здесь

У меня есть узел древовидной структуры с трехуровневой иерархией. В настоящее время работает функция «Добавить», «Удалить». Осталось только добавить измененный текст в выбранный узел, не удаляя узел перед вставкой?

Я видел некоторые вопросы на этом форуме и в результатах поиска, но решения выглядят не так, как мне нужно.

Решения, которые я нашел: -

  1. Получить индекс выбранного узла, удалить его, вставить новый в выбранный узел индекса. На здесь

  2. Выполните цикл внутри узла treeview, чтобы найти и заменить выбранную строку узла новой строкой. На здесь.

Почему я не могу следовать приведенной выше идее?

  1. Если выбранный узел был удален первым, будет ли удален и дочерний узел?
  2. Если существует более 1 узла с одинаковым текстом, его необходимо заменить в рекурсивном цикле.

Теперь у меня есть указатель родительского и текущего выбранного. Итак, это будет два индекса иерархии.

indxparent.Text = TreeView1.SelectedNode.Parent.Index.ToString() ?? "-";
indxchild.Text = TreeView1.SelectedNode.Index.ToString() ?? "-";

Как программировать добавление нового текста в выбранный узел / в индекс выбранного узла?

Использование рабочего кода до того, как Кемпет предложил свои решения:
Метод 1:

string newdata = "This is new information data";
TreeView1.LabelEdit = true;
if (!TreeView1.SelectedNode.IsEditing)
{
    TreeView1.SelectedNode.BeginEdit();
    TreeView1.SelectedNode.Text = newdata;
    TreeView1.SelectedNode.EndEdit(false);
}  

Способ 2:

string newdata = "This is new information data";
TreeNode node = new TreeNode(newdata);
TreeView1.SelectedNode.Parent.Nodes.RemoveAt(IndexOfSelectedNode);
TreeView1.SelectedNode.Parent.Nodes.Insert(IndexOfSelectedNode, node);
TreeView1.SelectedNode = node;

person Luiey    schedule 18.05.2017    source источник


Ответы (1)


Вы пробовали просто установить свойство Text для SelectedNode?

TreeView1.SelectedNode.Text = TreeView1.SelectedNode.Text + " MAGIC!"
person Kempeth    schedule 18.05.2017
comment
Серьезно, чувак. Я пробовал такие вот такие. Не совсем так, но, вероятно, так и не удалось. Итак, я с трудом находил ответ, прежде чем опубликовал здесь полдня своего рабочего дня. Я даже ищу с помощью BeginEdit, просто чтобы не удалять то, что мне нужно. string newdata = Новые информационные данные; Treeview1.LabelEdit = true; если (! Treeview1.SelectedNode.IsEditing) {Treeview1.SelectedNode.BeginEdit (); Treeview1.SelectedNode.Text = newdata; Treeview1.SelectedNode.EndEdit (ложь); } Но ваше решение, прямое попадание .. Спасибо @Kempeth - person Luiey; 18.05.2017