Я не знаю, является ли это опечаткой или нет, но в первой строке вы ссылаетесь на SelectNode
, а затем позже добавляете что-то под названием SelectedNode
.Это могут относиться к различным переменным / свойствам.
В противном случае, либо есть проблема с вашей SelectedNewNode
функцией, либо этот код выполняется в какой-то длительной синхронной операции и перерисовки не происходит вообще,Вам не нужен метод Refresh
вообще;когда вы вызываете метод Remove()
для TreeNode
, отображение обновляется, а когда вы Add
обращаетесь к другому родителю, оно снова обновляется.Удалите вызов Refresh
.
Если вы действительно пытаетесь выполнить обновление во время длительной операции, вам нужно вызвать Invalidate
, а затем Update
.Однако, если это не находится в цикле или блокирующем вызове где-то, это будет бессмысленно.
Есть еще одна возможность, которая заключается в том, что вы вызвали метод TreeView.BeginUpdate
и забыли вызвать TreeView.EndUpdate
, что препятствует отображению обновлений.
Просто чтобы проверить это, я проверил это на новой форме Windows с добавлением TreeView
двух корней (Node0
и Node1
) и одногоребенок каждому (Node2
и Node3
).Следующий код успешно обновляет отображение TreeView
:
TreeNode nodeToMove = treeView1.Nodes.Find("Node3", true).First();
TreeNode newParent = treeView1.Nodes.Find("Node0", false).First();
nodeToMove.Remove();
newParent.Nodes.Add(nodeToMove);
Если ни одно из приведенных выше предложений не решит вашу проблему, то начните с этого рабочего примера и посмотрите на разницу между рабочим примером и вашим текущимкод.