tree Drag

代码实现参考如下:

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

   }

  }

}

posted @ 2010-12-13 10:02  Mr.Tom  阅读(235)  评论(0编辑  收藏  举报