コード例 #1
0
        private void tvOrganize_DragDrop(object sender, DragEventArgs e)
        {
            // 定义一个中间变量
            TreeNode treeNode;

            //判断拖动的是否为TreeNode类型,不是的话不予处理
            if (!e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
            {
                return;
            }
            // 拖放的目标节点
            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 (!BasePageLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
            {
                return;
            }
            if (SystemInfo.ShowInformation)
            {
                // 是否移动部门
                if (MessageBoxHelper.Show(RDIFrameworkMessage.Format("确定移动{0}到{1}吗?", treeNode.Text, targetTreeNode.Text)) == System.Windows.Forms.DialogResult.Yes)
                {
                    return;
                }
            }
            organizationService.MoveTo(UserInfo, (treeNode.Tag as DataRow)[BusinessLogic.FieldId].ToString(), (targetTreeNode.Tag as DataRow)[BusinessLogic.FieldId].ToString());
            // 往目标节点中加入被拖动节点的一份克隆
            targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
            // 将被拖动的节点移除
            treeNode.Remove();
        }