В данной статье представленны исходные коды для следующих операций управления узлами (TreeNode) в элементе управления TreeView:
1) Переместить узел вверх
2) Переместить узел вниз
3) Переместить узел в список родительских узлов
4) Переместить узел в список узлов вышестоящего узла
Речь идет о языке программирования C# и WinForms.
Вот интрефейс программы:
Обработчик кнопки для заполнения TreeView тестовыми элементами TreeNode (нижняя в правом углу):
int i = 0;
private void newNodeButton_Click(object sender, EventArgs e)
{
// create node
TreeNode newNode = new TreeNode(String.Format("Node {0}", i++));
// add node in tree view
if (treeView.SelectedNode != null)
treeView.SelectedNode.Nodes.Add(newNode);
else
treeView.Nodes.Add(newNode);
}
* This source code was highlighted with Source Code Highlighter.
Вот код для определенных операций:
1) Узел вверх:
private void upButton_Click(object sender, EventArgs e)
{
if (treeView.SelectedNode != null
&& treeView.SelectedNode.PrevNode != null)
{
// define edit collection
TreeNodeCollection editNodes;
if (treeView.SelectedNode.Parent != null)
editNodes = treeView.SelectedNode.Parent.Nodes;
else
editNodes = treeView.Nodes;
// define indexes
int indexSelectedNode = treeView.SelectedNode.Index;
int indexPreviousNode = treeView.SelectedNode.PrevNode.Index;
// store node
TreeNode selectedNode = treeView.SelectedNode;
// swap
editNodes.RemoveAt(indexSelectedNode);
editNodes.Insert(indexPreviousNode, selectedNode);
// select node
treeView.SelectedNode = selectedNode;
}
}
* This source code was highlighted with Source Code Highlighter.
2) Узел вниз:
private void downButton_Click(object sender, EventArgs e)
{
if (treeView.SelectedNode != null
&& treeView.SelectedNode.NextNode != null)
{
// define edit collection
TreeNodeCollection editNodes;
if (treeView.SelectedNode.Parent != null)
editNodes = treeView.SelectedNode.Parent.Nodes;
else
editNodes = treeView.Nodes;
// define indexes
int indexSelectedNode = treeView.SelectedNode.Index;
int indexNextNode = treeView.SelectedNode.NextNode.Index;
// store node
TreeNode selectedNode = treeView.SelectedNode;
// swap
editNodes.RemoveAt(indexSelectedNode);
editNodes.Insert(indexNextNode, selectedNode);
// select node
treeView.SelectedNode = selectedNode;
}
}
* This source code was highlighted with Source Code Highlighter.
3) Узел влево:
private void leftButton_Click(object sender, EventArgs e)
{
if (treeView.SelectedNode != null
&& treeView.SelectedNode.Parent != null)
{
// define edit collection
TreeNodeCollection editNodes;
if (treeView.SelectedNode.Parent.Parent != null)
editNodes = treeView.SelectedNode.Parent.Parent.Nodes;
else
editNodes = treeView.Nodes;
// store node
TreeNode selectedNode = treeView.SelectedNode;
// define indexes
int indexSelectedNode = treeView.SelectedNode.Index;
int indexParentNode = treeView.SelectedNode.Parent.Index;
// move node
treeView.SelectedNode.Parent.Nodes.Remove(selectedNode);
editNodes.Insert(indexParentNode + 1, selectedNode);
// select node
treeView.SelectedNode = selectedNode;
}
}
* This source code was highlighted with Source Code Highlighter.
4) Узел вправо:
private void rightButton_Click(object sender, EventArgs e)
{
if (treeView.SelectedNode != null
&& treeView.SelectedNode.PrevNode != null)
{
// define edit collection
TreeNodeCollection editNodes;
if (treeView.SelectedNode.Parent != null)
editNodes = treeView.SelectedNode.Parent.Nodes;
else
editNodes = treeView.Nodes;
// store node
TreeNode selectedNode = treeView.SelectedNode;
TreeNode previousNode = selectedNode.PrevNode;
// move node
editNodes.Remove(selectedNode);
previousNode.Nodes.Add(selectedNode);
// select node
treeView.SelectedNode = selectedNode;
}
}
* This source code was highlighted with Source Code Highlighter.
Интрефейс пользователя подсказывает, какие операции доступны для выбранного элемента. Об этом заботится следующая функция:
private void updateEnablingButtons()
{
upButton.Enabled = (treeView.SelectedNode != null
&& treeView.SelectedNode.PrevNode != null);
downButton.Enabled = (treeView.SelectedNode != null
&& treeView.SelectedNode.NextNode != null);
leftButton.Enabled = (treeView.SelectedNode != null
&& treeView.SelectedNode.Parent != null);
rightButton.Enabled = (treeView.SelectedNode != null
&& treeView.SelectedNode.PrevNode != null);
}
* This source code was highlighted with Source Code Highlighter.
Ее вызываю в момент создания формы и по событию AfterSelect элемента управления TreeView