浅谈DevExpress<四>:TreeList中的拖拽功能
本篇要实现的目标,简单来说就是把一个treelist的节点用鼠标拖到另外的节点(自身或其他的listview)上,如下图:
1
2
3
首先,在窗口中拉入两个listview,第一个创建三列(上),第二个创建两列(下),如下图:
为第一个listview创建一些节点:
定义一个取得拖拽对象中节点的方法:
private TreeListNode GetDragNode(IDataObject data) { return (TreeListNode)data.GetData(typeof(TreeListNode)); }
在两个treelist中同时定义DragDrop(鼠标松开)和DragEnter(开始拖拽)事件:
private void treeList1_DragDrop(object sender, DragEventArgs e) { TreeListNode node = GetDragNode(e.Data); if (node == null) return; TreeList list = (TreeList)sender; if (list == node.TreeList) return; TreeListHitInfo info = list.CalcHitInfo(list.PointToClient(new Point(e.X, e.Y))); InsertBrush(list,node,info.Node==null?-1:info.Node.Id); } private void treeList1_DragEnter(object sender, DragEventArgs e) { TreeList list = (TreeList)sender; TreeListNode node = GetDragNode(e.Data); if (node != null && node.TreeList != list) e.Effect = DragDropEffects.Copy; }
最后定义插入节点的方法:
private void InsertBrush(TreeList list, TreeListNode node, int parent) { ArrayList data = new ArrayList(); foreach (TreeListColumn column in node.TreeList.Columns) { data.Add(node[column]); } parent = list.AppendNode(data.ToArray(), parent).Id; if (node.HasChildren) foreach (TreeListNode n in node.Nodes) InsertBrush(list, n, parent); }
现在就可以用鼠标实现两个列表的互拖了:
浮躁的人容易问:我到底该学什么;----别问,学就对了; 浮躁的人容易问:JS有钱途吗;----建议你去抢银行; 浮躁的人容易说:我要中文版!我英文不行!----不行?学呀! 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个高手。