using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace ditu.source
{
class dragTreeViewNode:Form
{
private TreeView treeView;
private EventArgs dragEvent = new EventArgs();
public EventArgs DragEvent
{
get
{
return this.dragEvent;
}
set
{
dragEvent = value;
}
}
public dragTreeViewNode()
{
}
public dragTreeViewNode(object obj)
{
treeView = (TreeView)obj;
}
/// <summary>
/// //向上拖動
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void MiMoveUp_Click(object sender, EventArgs e)//向上拖動
{
TreeNode Node = TreeView.SelectedNode;
TreeNode PrevNode = Node.PrevNode;
if (PrevNode != null)
{
TreeNode NewNode = (TreeNode)Node.Clone();
if (Node.Parent == null)
{
TreeView.Nodes.Insert(PrevNode.Index, NewNode);
}
else
{
Node.Parent.Nodes.Insert(PrevNode.Index, NewNode);
}
Node.Remove();
TreeView.SelectedNode = NewNode;
}
}
/// <summary>
/// //向下移動
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void MiMoveDown_Click(object sender, EventArgs e)//向下移動
{
TreeView treeView = (TreeView)sender;
TreeNode node = treeView.SelectedNode;
TreeNode nextNode = node.NextNode;
string newNodeName = null;
if (nextNode != null)
{
TreeNode newNode = (TreeNode)node.Clone();
if (node.Parent == null)
{
treeView.Nodes.Insert(nextNode.Index+1, newNodeName);
}
else
{
node.Parent.Nodes.Insert(nextNode.Index+1, newNodeName);
}
node.Remove();
treeView.SelectedNode = newNode;
}
}
//拖動代碼
/// <summary>
/// //左鍵拖動
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void TreeView_ItemDrag(object sender, ItemDragEventArgs e)//左鍵拖動
{
if (e.Button == MouseButtons.Left)
{
DoDragDrop(e.Item,DragDropEffects.Move);
}
}
/// <summary>
/// //判斷拖動物件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void treeView_DragEnter(object sender, DragEventArgs e)//判斷拖動物件
{
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
/// <summary>
/// //拖動
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void treeView_DragDrop(object sender, DragEventArgs e)//拖動
{
string newMoveNodeName=null;
TreeView treeView = (TreeView)sender;
TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");//獲得拖放中的節點
//根據滑鼠座標確定要移動到目標節點
Point pt;
TreeNode targetNode;
pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
targetNode = treeView.GetNodeAt(pt.X, pt.Y);
//如果目標節點無子節點則添加為同級節點,反之添加到下級節點的未端
TreeNode newMoveNode = (TreeNode)moveNode.Clone();
if (targetNode.Nodes.Count == 0)
{
targetNode.Parent.Nodes.Insert(targetNode.Index, newMoveNodeName);
}
else
{
targetNode.Nodes.Insert(targetNode.Nodes.Count, newMoveNodeName);
}
//更新當前拖動的節點選擇
treeView.SelectedNode = (TreeNode)newMoveNode;
//展開目標節點,便於顯示拖放效果
targetNode.Expand();
//移除拖放的節點
moveNode.Remove();
}
}
}
全站熱搜
留言列表