Private Sub myTabControl_DragOver(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DragEventArgs) Handles myTabControl.DragOver
Dim myTabs As TabControl = sender

'Get the position of the mouse, relative to the tab control
Dim pt As Point = _
myTabs.PointToClient(New Point(e.X, e.Y))
Dim IndexOld As Integer = myTabs.SelectedIndex

' !!Call The function!!
Dim IndexNew As Integer = GetTabPageIndex(pt, myTabs)

'Check the previously selected index
'and the return index numbers for equality
If IndexNew <> IndexOld Then

'Changes the selected index of the Tab Control
myTabs.SelectedIndex = IndexNew
myTabs.Focus()

'The next lines center the mouse up on the tab
Dim tr As Rectangle = myTabs.GetTabRect(IndexNew)
Windows.Forms.Cursor.Position = myTabs.PointToScreen _
(New Point(tr.X + (tr.Width / 2), tr.Y + (tr.Height / 2)))
End If
End Sub

'////////////////////////////////////////////////////////
'''''''This function returns an index number for the tab
'''''''your mouse is over
'////////////////////////////////////////////////////////
Private Function GetTabPageIndex( _
ByVal p As Point, _
ByVal myTabs As TabControl) As Integer
Dim index As Integer = 0

'Check all the Tabs
For index = 0 To myTabs.TabCount - 1

'This gets the rectangle of the Tab
Dim TabRect As Rectangle = _
myTabs.GetTabRect(index)

'The checks if the mouse position
'is inside the Tab Rectangle
If TabRect.Contains(p.X, p.Y) Then
Return index
End If
Next
Return index
End Functio

Src