ultratree的使用(一):节点间的拖动
原文:http://blog.csdn.net/szm220/archive/2007/07/28/1713246.aspx
对节点的拖动通常需要三个步骤:选择需拖放节点,选择拖放位置和执行操作。
如果需要实现多个节点同时拖放的话,那么就要在构造函数中设置多选功能:
ultraTree2.Override.SelectionType = SelectType.ExtendedAutoDrag; //实现多选功能
在这之前需要设置个全局变量:拖放位置的节点。
private UltraTreeNode AfterNode;
好了,现在开始执行第一步:在这个步骤中要用到DragDrop事件。
private void ultraTree2_DragDrop(object sender, DragEventArgs e)
...{
UltraTreeNode BeforeNode = null;
SelectedNodesCollection SelectedNodes;
SelectedNodes = (SelectedNodesCollection)e.Data.GetData(typeof(SelectedNodesCollection));
SelectedNodes = SelectedNodes.Clone() as SelectedNodesCollection;
SelectedNodes.SortByPosition();
//只允许最小等级的拖动
if (SelectedNodes[0].Level == 2)
...{
//拖到父级时
if (AfterNode.Level == 1)
...{
for (int i = 0; i <= (SelectedNodes.Count - 1); i++)
...{
BeforeNode = SelectedNodes[i];
BeforeNode.Reposition(AfterNode.Nodes);
}
}
//拖到同等级时
if (AfterNode.Level == 2)
...{
for (int i = 0; i <= (SelectedNodes.Count - 1); i++)
...{
BeforeNode = SelectedNodes[i];
BeforeNode.Reposition(AfterNode, NodePosition.Previous);
}
}
}
}
...{
UltraTreeNode BeforeNode = null;
SelectedNodesCollection SelectedNodes;
SelectedNodes = (SelectedNodesCollection)e.Data.GetData(typeof(SelectedNodesCollection));
SelectedNodes = SelectedNodes.Clone() as SelectedNodesCollection;
SelectedNodes.SortByPosition();
//只允许最小等级的拖动
if (SelectedNodes[0].Level == 2)
...{
//拖到父级时
if (AfterNode.Level == 1)
...{
for (int i = 0; i <= (SelectedNodes.Count - 1); i++)
...{
BeforeNode = SelectedNodes[i];
BeforeNode.Reposition(AfterNode.Nodes);
}
}
//拖到同等级时
if (AfterNode.Level == 2)
...{
for (int i = 0; i <= (SelectedNodes.Count - 1); i++)
...{
BeforeNode = SelectedNodes[i];
BeforeNode.Reposition(AfterNode, NodePosition.Previous);
}
}
}
}
根据拖放的需要可以对LEVEL进行修改。
然后选择拖放位置:
private void ultraTree2_DragOver(object sender, DragEventArgs e)
{
//根据鼠标拖动的位置获取拖放点的节点
System.Drawing.Point PointInTree;
PointInTree = ultraTree2.PointToClient(new Point(e.X, e.Y));
AfterNode = ultraTree2.GetNodeFromPoint(PointInTree);
e.Effect = DragDropEffects.Move;
}
可以了,需拖放的节点和拖放位置都有了,那么就执行操作吧。
private void ultraTree2_SelectionDragStart(object sender, EventArgs e)
{
ultraTree2.DoDragDrop(ultraTree2.SelectedNodes, DragDropEffects.Move);
}
{
ultraTree2.DoDragDrop(ultraTree2.SelectedNodes, DragDropEffects.Move);
}
怎么样?感觉很棒吧。
ultratree的使用(二):节点间的选择关联 http://blog.csdn.net/szm220/archive/2007/07/28/1713269.aspx
ultratree的使用(三):在树上面添加新节点 http://blog.csdn.net/szm220/archive/2007/07/28/1713305.aspx
ultratree的使用(四):动态加载树 http://blog.csdn.net/szm220/archive/2007/07/28/1713398.aspx