TreeView控件节点拖动,问题出在哪儿?TreeView及TreeNode均为自己继承下来的。
源程序如下:
Public Class FormTest
Dim TestTreeView As MyTreeView
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TestTreeView = New MyTreeView
TestTreeView.Visible = True
TestTreeView.Location = New Point(0, 0)
TestTreeView.Size = New Size(500, 1000)
Dim ParentNode1 As New MyTreeNode("Computer1", "192.168.1.10")
ParentNode1.Nodes.Add(New MyTreeNode("Test", "11.0.0.10"))
Dim ParentNode2 As New MyTreeNode("Computer2", "192.168.1.20")
Dim ParentNode3 As New MyTreeNode("Computer3", "192.168.1.30")
Dim ParentNode4 As New MyTreeNode("Computer4", "192.168.1.40")
Dim ParentNode5 As New MyTreeNode("Computer5", "192.168.1.50")
TestTreeView.Nodes.AddRange(New MyTreeNode() {ParentNode1, ParentNode2, ParentNode3})
TestTreeView.ExpandAll()
Me.Controls.Add(TestTreeView)
End Sub
End Class
Public Class MyTreeView
Inherits TreeView
Sub New()
Me.AllowDrop = True
End Sub
Private Sub MyTreeView_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
MsgBox(CType(Me.SelectedNode, MyTreeNode).IpAddress)
End Sub
Private Sub MyTreeView_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
Try
If e.Data.GetDataPresent(GetType(MyTreeNode).ToString, False) Then
Dim pt As Point = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y))
Dim DestinationNode As MyTreeNode = CType(CType(sender, TreeView).GetNodeAt(pt), MyTreeNode)
Dim NewNode As MyTreeNode = CType(e.Data.GetData(GetType(MyTreeNode).ToString), MyTreeNode)
'Method1
DestinationNode.Nodes.Add(NewNode.Clone)
DestinationNode.Expand()
NewNode.Remove()
'Method2
'Me.Nodes.Remove(NewNode)
'DestinationNode.Nodes.Add(NewNode)
'DestinationNode.Expand()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub MyTreeView_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
e.Effect = DragDropEffects.Move
End Sub
Private Sub MyTreeView_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles Me.ItemDrag
Me.DoDragDrop(e.Item, DragDropEffects.Move)
End Sub
End Class
Public Class MyTreeNode
Inherits TreeNode
Dim mIp As String
Property IpAddress() As String
Get
Return mIp
End Get
Set(ByVal value As String)
mIp = value
End Set
End Property
Sub New()
Me.Text = "Default"
Me.IpAddress = "0.0.0.0"
End Sub
Sub New(ByVal Text As String, ByVal Ip As String)
Me.Text = Text
Me.IpAddress = Ip
End Sub
End Class
/////////////////////////////////////
MyTreeView_DragDrop方法中有两种Method1和Method2,如果我把节点Test拖动到ParentNode2或ParentNode3上后,为什么两种方式执行以后,DoubleClick节点Test,结果不一样呢?