Как удалить узел дерева и переместить его узел вверх? - PullRequest
2 голосов
/ 05 мая 2011

На самом деле в моем дереве, когда я удаляю узел дерева, он удаляет все его дочерние узлы, но мне нужно переместить его дочерний узел вверх вместо удаления. Я должен использовать в winforms до-диез.

Кто-нибудь поможет мне.

Ответы [ 4 ]

4 голосов
/ 05 мая 2011

То есть вы просто хотите удалить узел и оставить все дочерние узлы?

Что вам нужно сделать, это:

  1. Удалить дочерние узлы из узла, который вы хотите удалить.
  2. Добавьте дочерние узлы перед узлом, который хотите удалить.
  3. Удалить выбранный узел.
2 голосов
/ 05 мая 2011

Что сказала Рапсодия.
И вот пример:

if (tree.Nodes.Contains(theNode))
        {
            TreeNodeCollection childNodes = theNode.Nodes;
            tree.Nodes.Remove(theNode);
            foreach (TreeNode child in childNodes)
            {
                tree.Nodes.Add(child);
            }
        }
1 голос
/ 05 мая 2011

Вы можете перебрать дочерние узлы и добавить их к родительскому узлу перед удалением самого узла.Этот код должен обрабатывать случаи, когда удаляемый узел является родительским.

if (nodeToRemove.Nodes.Count > 0) {
List<TreeNode> childNodes = new List<TreeNode>();
foreach (TreeNode n in nodeToRemove.Nodes) {
   childNodes.Add(n);
}
if ((nodeToRemove.Parent != null)) {
   nodeToRemove.Parent.Nodes.AddRange(childNodes.ToArray());
   } else {
     nodeToRemove.TreeView.Nodes.AddRange(childNodes.ToArray());
    }
   }
nodeToRemove.Remove();
1 голос
/ 05 мая 2011

Ваша проблема вызвана тем, что дочерние узлы любого данного узла хранятся в myNode.Nodes. Таким образом, когда вы удаляете узел, все его узлы также освобождаются, поэтому вам придется сначала перебрать дочерние узлы, переместить их, а затем удалить исходный узел:

//assume treeChild is what you are removing, and treeControl is you TreeView
//this code will move all of its children nodes
//to be children of its parent before being removed

//set that we are updating the treeview control
//increases performance by blocking the paint methods until update is finished
treeControl.BeginUpdate();

//this will loop through child nodes of what we are removing
//then add them to the parent
foreach(TreeView node in treeChild.ChildNodes)
{
   node.Parent.Nodes.Add(node);
}

//then remove the node
treeChild.Remove();

treeControl.EndUpdate(); //note that we finished updated the controls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...