在Form Load的時候爲了完全顯示節點,不必一一點開,建議加上如下代碼:
{
this.treeView1.ExpandAll();
}
在拖拽時要注意的是:1.目標節點不能爲空。2.目標節點不能被拖拽節點本身。3.目標節點不能是被拖拽節點的字節。以下是3個事件的代碼:
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode myNode = null;
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
}
else
{
MessageBox.Show("error");
}
Position.X = e.X;
Position.Y = e.Y;
Position = treeView1.PointToClient(Position);
TreeNode DropNode = this.treeView1.GetNodeAt(Position);
// 1.目標節點不是空。2.目標節點不是被拖拽接點的字節點。3.目標節點不是被拖拽節點本身
if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
{
TreeNode DragNode = myNode;
// 將被拖拽節點從原來位置刪除。
myNode.Remove();
// 在目標節點下增加被拖拽節點
DropNode.Nodes.Add(DragNode);
}
// 如果目標節點不存在,即拖拽的位置不存在節點,那麼就將被拖拽節點放在根節點之下
if (DropNode == null)
{
TreeNode DragNode = myNode;
myNode.Remove();
treeView1.Nodes.Add(DragNode);
}
}