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(); }