You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
3.5 KiB
72 lines
3.5 KiB
Namespace TKB.VV.Utils
|
|
Public Class clsMyTabControl
|
|
Inherits System.Windows.Forms.TabControl 'Drag and Drop - reordering support
|
|
|
|
Private _SourceTabPage As System.Windows.Forms.TabPage = Nothing
|
|
|
|
Public Sub New()
|
|
MyBase.New()
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
|
|
If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (MyBase.SelectedTab IsNot Nothing) AndAlso (Not MyBase.GetTabRect(MyBase.SelectedIndex).IsEmpty) Then
|
|
Me._SourceTabPage = MyBase.SelectedTab
|
|
End If
|
|
MyBase.OnMouseDown(e)
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
|
|
If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (Me._SourceTabPage IsNot Nothing) Then
|
|
Dim currTabPage As System.Windows.Forms.TabPage = GetTabPageFromXY(e.X, e.Y)
|
|
If (currTabPage IsNot Nothing) Then
|
|
Dim currRect As Drawing.Rectangle = MyBase.GetTabRect(MyBase.TabPages.IndexOf(currTabPage))
|
|
If (MyBase.TabPages.IndexOf(currTabPage) < MyBase.TabPages.IndexOf(Me._SourceTabPage)) Then
|
|
MyBase.Cursor = Cursors.PanWest
|
|
ElseIf (MyBase.TabPages.IndexOf(currTabPage) > MyBase.TabPages.IndexOf(Me._SourceTabPage)) Then
|
|
MyBase.Cursor = Cursors.PanEast
|
|
Else 'tab is same as current
|
|
MyBase.Cursor = Cursors.Default
|
|
End If
|
|
Else 'no tab selected
|
|
Me.Cursor = Cursors.No
|
|
End If
|
|
Else
|
|
Me.Cursor = Cursors.Default
|
|
End If
|
|
MyBase.OnMouseMove(e)
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
|
|
If (e.Button = Windows.Forms.MouseButtons.Left) AndAlso (Me._SourceTabPage IsNot Nothing) Then
|
|
Dim currTabPage As System.Windows.Forms.TabPage = GetTabPageFromXY(e.X, e.Y)
|
|
If (currTabPage IsNot Nothing) AndAlso (Not currTabPage.Equals(Me._SourceTabPage)) Then
|
|
Dim currRect As Drawing.Rectangle = MyBase.GetTabRect(MyBase.TabPages.IndexOf(currTabPage))
|
|
If (MyBase.TabPages.IndexOf(currTabPage) < MyBase.TabPages.IndexOf(Me._SourceTabPage)) Then
|
|
MyBase.TabPages.Remove(Me._SourceTabPage)
|
|
MyBase.TabPages.Insert(MyBase.TabPages.IndexOf(currTabPage), Me._SourceTabPage)
|
|
MyBase.SelectedTab = Me._SourceTabPage
|
|
ElseIf (MyBase.TabPages.IndexOf(currTabPage) > MyBase.TabPages.IndexOf(Me._SourceTabPage)) Then
|
|
MyBase.TabPages.Remove(Me._SourceTabPage)
|
|
MyBase.TabPages.Insert(MyBase.TabPages.IndexOf(currTabPage) + 1, Me._SourceTabPage)
|
|
MyBase.SelectedTab = Me._SourceTabPage
|
|
End If
|
|
End If
|
|
End If
|
|
Me._SourceTabPage = Nothing
|
|
MyBase.Cursor = Cursors.Default
|
|
MyBase.OnMouseUp(e)
|
|
End Sub
|
|
|
|
|
|
Private Function GetTabPageFromXY(ByVal x As Integer, ByVal y As Integer) As TabPage
|
|
For i As Integer = 0 To MyBase.TabPages.Count - 1
|
|
If MyBase.GetTabRect(i).Contains(x, y) Then
|
|
Return MyBase.TabPages(i)
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
End Function
|
|
|
|
End Class
|
|
End Namespace
|