C#实现树型结构TreeView节点拖拽的简要意义(转)

正文摘录博客园里面的牛人吉日嘎啦。http://www.cnblogs.com/jirigala

 

 例子程序运行效果怎样下:

C# 1  

  当然在节点拖拽时,需要专注几个事情:

  
1:拖拽时到底要有提示信息比较好,防止误操作后查找不至让推摘到哪里去了。

  
2:父亲节点总不能够拖延拽到祥和之子节点上,那不是死循环或者胡乱了辈份了非是?

  为了给TreeView支持拖拽功能,需要注意以下几单属性设置与相应的波代码。

C# 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C# 3

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 代码实现参考如下:

       private void tvOrganize_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (this.permissionEdit)
            {
                // 开始展开拖放操作,并以拖放的法力设置成移动。
                this.DoDragDrop(e.Item, DragDropEffects.Move);
            }
        }

        private void tvOrganize_DragEnter(object sender, DragEventArgs e)
        {
            // 拖动效果使成移动
            e.Effect = DragDropEffects.Move;
        }

        private void tvOrganize_DragDrop(object sender, DragEventArgs e)
        {
            // 定义一个当中变量
            TreeNode treeNode;
            //判断拖动的是否为TreeNode类型,不是的语不予处理
            if (e.Data.GetDataPresent(“System.Windows.Forms.TreeNode”, false))
            {
                // 拖放的靶子节点
                TreeNode targetTreeNode;
                // 获取当前光标所处的坐标
                // 定义一个位置点的变量,保存时光标所处的坐标点
                Point point = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                // 根据坐标点取得处于坐标点位置的节点
                targetTreeNode = ((TreeView)sender).GetNodeAt(point);
                // 获取给拖动的节点
                treeNode = (TreeNode)e.Data.GetData(“System.Windows.Forms.TreeNode”);
                // 判断拖动的节点和目标节点是否是暨一个,同一个唱对台戏处理
                if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
                {
                    if (BaseSystemInfo.ShowInformation)
                    {
                        // 是否动部门
                        if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0038, treeNode.Text, targetTreeNode.Text), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                        {
                            return;
                        }
                    }
                    ServiceManager.Instance.OrganizeService.MoveTo(UserInfo, treeNode.Tag.ToString(), targetTreeNode.Tag.ToString());
                    // 往目标节点受到投入被拖动节点的平份克隆
                    targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
                    // 将给拖动的节点移除
                    treeNode.Remove();
                }
            }
        }

 

 

 

相关文章