Old stuff, but I spent a couple of hours running into the same problem, so here's what works:
Imports System.Runtime.Serialization Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load Me.TV.Nodes.Clear() Dim tNode As New TemplateNode() Me.TV.Nodes.Add(tNode) For i As Integer = 1 To 5 Dim newNode As New TemplateNode() tNode.Nodes.Add(newNode) tNode = newNode Next Me.TV.ExpandAll() End Sub Private Sub TV_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles TV.ItemDrag DoDragDrop(Me.TV.SelectedNode, DragDropEffects.Copy + DragDropEffects.Move + DragDropEffects.Scroll) End Sub Private Sub TV_DragEnter(sender As Object, e As DragEventArgs) Handles TV.DragEnter e.Effect = DragDropEffects.Move End Sub Private Sub TV_DragOver(sender As Object, e As DragEventArgs) Handles TV.DragOver e.Effect = DragDropEffects.Move If (e.KeyState And 8) = 8 Then e.Effect += DragDropEffects.Copy End If End Sub Private Sub TV_DragDrop(sender As Object, e As DragEventArgs) Handles TV.DragDrop Dim TemplateNode As TemplateNode = e.Data.GetData(GetType(TemplateNode)) Me.TV.Nodes.Add(TemplateNode.Clone()) End Sub Private Sub bCopy_Click(sender As Object, e As EventArgs) Handles bCopy.Click My.Computer.Clipboard.SetData("TemplateNode", Me.TV.SelectedNode) End Sub Private Sub bCut_Click(sender As Object, e As EventArgs) Handles bCut.Click My.Computer.Clipboard.SetData("TemplateNode", Me.TV.SelectedNode) Me.TV.SelectedNode.Remove() End Sub Private Sub bPaste_Click(sender As Object, e As EventArgs) Handles bPaste.Click Dim TemplateNode As TemplateNode = My.Computer.Clipboard.GetData("TemplateNode") If Me.TV.SelectedNode Is Nothing Then Me.TV.Nodes.Add(TemplateNode) Else Me.TV.SelectedNode.Nodes.Add(TemplateNode) End If End Sub End Class <Serializable()> _ Public Class TemplateNode Inherits TreeNode Public MyString As String = "MyStringValue" Public MyDateTime As DateTime = DateTime.Now Public MyBytes() As Byte Public Sub New() Dim buff(255) As Byte For i As Integer = 0 To buff.GetUpperBound(0) buff(i) = CByte(Rnd() * 100) Next Me.MyBytes = buff Me.Text = Guid.NewGuid().ToString() End Sub Protected Friend Sub New(info As SerializationInfo, context As StreamingContext) MyBase.New(info, context) End Sub End Class
source share