拖放操作:从DataGridView拖放一行数据到TreeView中的某个节点。
拖动过程中会高亮鼠标所在的节点。
拖出时候会恢复节点正常样式。
Dim dropNode As TreeNode Private Sub Dv_MouseMove(sender As System.Object,e As System.Windows.Forms.MouseEventArgs) Handles Dv.MouseMove If (e.Button And Windows.Forms.MouseButtons.Left) = Windows.Forms.MouseButtons.Left Then Dim dvs As DataGridView = CType(sender,DataGridView) If dvs.HitTest(e.X,e.Y).Type = DataGridViewHitTestType.Cell Then If dvs.SelectedRows.Count > 0 Then Dim drg As New DragDataObject(eDragType.MoveStaffToDept,dvs.SelectedRows.Item(0)) dvs.DoDragDrop(drg,DragDropEffects.Move) End If End If End If End Sub Private Sub UpdateStaffDepartmentID(intCompanyID As Integer,intDepartmentID As Integer,lngStaffID As Long) '... End Sub Private Sub Tv_DragDrop(sender As Object,e As System.Windows.Forms.DragEventArgs) Handles Tv.DragDrop If e.Data.GetDataPresent(GetType(DragDataObject)) Then Dim drg As DragDataObject = e.Data.GetData(GetType(DragDataObject)) If drg.DragType = eDragType.MoveStaffToDept Then Dim tnode As TreeNode = Tv.GetNodeAt(Tv.PointToClient(Control.MousePosition)) UpdateStaffDepartmentID(FindNodeCompanyID(tnode),tnode.Name,CLng(CType(drg.Data,DataGridViewRow).Cells(TBC.lngStaffID).Value)) Me.Dv.Rows.Remove(CType(drg.Data,DataGridViewRow)) If dropNode IsNot Nothing Then EraserHighlightNode(dropNode) dropNode = Nothing End If End If End If End Sub Private Sub Tv_DragEnter(sender As Object,e As System.Windows.Forms.DragEventArgs) Handles Tv.DragEnter 'If e.Data.GetDataPresent(GetType(DragDataObject)) Then ' Dim drg As DragDataObject = e.Data.GetData(GetType(DragDataObject)) ' If drg.DragType = eDragType.MoveStaffToDept Then ' e.Effect = DragDropEffects.All ' Else ' e.Effect = DragDropEffects.None ' End If 'End If End Sub Private Sub Tv_DragLeave(sender As Object,e As System.EventArgs) Handles Tv.DragLeave If dropNode IsNot Nothing Then EraserHighlightNode(dropNode) dropNode = Nothing End If End Sub Private Sub HighlightNode(node As TreeNode) With node .BackColor = SystemColors.Highlight .ForeColor = SystemColors.HighlightText End With End Sub Private Sub EraserHighlightNode(node As TreeNode) With node .BackColor = SystemColors.Window .ForeColor = SystemColors.WindowText End With End Sub Private Sub Tv_DragOver(sender As Object,e As System.Windows.Forms.DragEventArgs) Handles Tv.DragOver If e.Data.GetDataPresent(GetType(DragDataObject)) Then Dim drg As DragDataObject = e.Data.GetData(GetType(DragDataObject)) If drg.DragType = eDragType.MoveStaffToDept Then Dim tnode As TreeNode = Tv.GetNodeAt(Tv.PointToClient(Control.MousePosition)) If tnode IsNot Nothing Then If tnode.Tag = eTreeTag.Department Then e.Effect = DragDropEffects.All Else e.Effect = DragDropEffects.None End If Else e.Effect = DragDropEffects.None End If If e.Effect = DragDropEffects.None Then If dropNode IsNot Nothing Then EraserHighlightNode(dropNode) dropNode = Nothing End If Else If tnode IsNot Nothing Then If dropNode IsNot Nothing Then If tnode.Equals(dropNode) = False Then EraserHighlightNode(dropNode) dropNode = tnode HighlightNode(dropNode) End If Else dropNode = tnode HighlightNode(dropNode) End If End If End If Else e.Effect = DragDropEffects.None End If End If End Sub