TabControl.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:83k
源码类别:

C#编程

开发平台:

C#

  1. Imports System.ComponentModel
  2. <DesignTimeVisible(True)> _
  3. Public Class TabControl
  4. #Region " Class GetTabRegionEventArgs "
  5.     <Description("Provides data for the MdiTabControl.TabControl.GetTabRegion event.")> _
  6.     Public Class GetTabRegionEventArgs
  7.         Inherits System.EventArgs
  8.         Private m_Points() As Point
  9.         Private m_TabWidth As Integer
  10.         Private m_TabHeight As Integer
  11.         Private m_Selected As Boolean
  12.         Private Sub New()
  13.         End Sub
  14.         <Description("Initializes a new instance of the MdiTabControl.TabControl.GetTabRegionEventArgs class.")> _
  15.         Public Sub New(ByVal Points() As Point, ByVal Width As Integer, ByVal Height As Integer, ByVal Selected As Boolean)
  16.             MyBase.new()
  17.             m_Points = Points
  18.             m_TabWidth = Width
  19.             m_TabHeight = Height
  20.             m_Selected = Selected
  21.         End Sub
  22.         <Description("Returns whether the tab is selected or not.")> _
  23.         Public ReadOnly Property Selected() As Integer
  24.             Get
  25.                 Return m_Selected
  26.             End Get
  27.         End Property
  28.         <Description("Returns the tab width.")> _
  29.         Public ReadOnly Property TabWidth() As Integer
  30.             Get
  31.                 Return m_TabWidth
  32.             End Get
  33.         End Property
  34.         <Description("Returns the tab height.")> _
  35.         Public ReadOnly Property TabHeight() As Integer
  36.             Get
  37.                 Return m_TabHeight
  38.             End Get
  39.         End Property
  40.         <Description("Gets or sets an array of System.Drawing.Point structures that represents the points through which the tab path is constructed.")> _
  41.         Public Property Points() As Point()
  42.             Get
  43.                 Return m_Points
  44.             End Get
  45.             Set(ByVal value As Point())
  46.                 m_Points = value
  47.             End Set
  48.         End Property
  49.     End Class
  50. #End Region
  51. #Region " Class TabPaintEventArgs "
  52.     <Description("Provides data for the MdiTabControl.TabControl.TabPaint event.")> _
  53.     Public Class TabPaintEventArgs
  54.         Inherits PaintEventArgs
  55.         Private m_Handled As Boolean = False
  56.         Private m_Selected As Boolean = False
  57.         Private m_Hot As Boolean = False
  58.         Private m_GraphicPath As Drawing2D.GraphicsPath
  59.         Private m_TabWidth As Integer
  60.         Private m_TabHeight As Integer
  61.         <Description("Initializes a new instance of the MdiTabControl.TabControl.GetTabRegionEventArgs class.")> _
  62.         Public Sub New(ByVal graphics As Graphics, ByVal clipRect As Rectangle, ByVal Selected As Boolean, ByVal Hot As Boolean, ByVal GraphicPath As Drawing2D.GraphicsPath, ByVal Width As Integer, ByVal Height As Integer)
  63.             MyBase.New(graphics, clipRect)
  64.             m_Selected = Selected
  65.             m_Hot = Hot
  66.             m_GraphicPath = GraphicPath
  67.             m_TabWidth = Width
  68.             m_TabHeight = Height
  69.         End Sub
  70.         <Description("Returns the tab's hot state.")> _
  71.         Public ReadOnly Property Hot() As Boolean
  72.             Get
  73.                 Return m_Hot
  74.             End Get
  75.         End Property
  76.         <Description("Returns whether the tab is selected or not.")> _
  77.         Public ReadOnly Property Selected() As Boolean
  78.             Get
  79.                 Return m_Selected
  80.             End Get
  81.         End Property
  82.         <Description("Gets or sets a value that indicates whether the event handler has completely handled the paint or whether the system should continue its own processing.")> _
  83.         Public Property Handled() As Boolean
  84.             Get
  85.                 Return m_Handled
  86.             End Get
  87.             Set(ByVal value As Boolean)
  88.                 m_Handled = value
  89.             End Set
  90.         End Property
  91.         <Description("Returns the tab width.")> _
  92.         Public ReadOnly Property TabWidth() As Integer
  93.             Get
  94.                 Return m_TabWidth
  95.             End Get
  96.         End Property
  97.         <Description("Returns the tab height.")> _
  98.         Public ReadOnly Property TabHeight() As Integer
  99.             Get
  100.                 Return m_TabHeight
  101.             End Get
  102.         End Property
  103.         <Description("Represents a series of connected lines and curves which the tab path is constructed.")> _
  104.         Public ReadOnly Property GraphicPath() As Drawing2D.GraphicsPath
  105.             Get
  106.                 Return m_GraphicPath
  107.             End Get
  108.         End Property
  109.     End Class
  110. #End Region
  111. #Region " Class TabPageCollection "
  112.     <Description("Contains a collection of MdiTabControl.TabPage objects.")> _
  113.     Public Class TabPageCollection
  114.         Inherits CollectionBase
  115.         Private TabControl As TabControl
  116.         Private IsReorder As Boolean = False
  117.         Friend Event GetTabRegion(ByVal sender As Object, ByVal e As TabControl.GetTabRegionEventArgs)
  118.         <Description("Occurs when the Tab Background has been painted.")> _
  119.         Friend Event TabPaintBackground(ByVal sender As Object, ByVal e As TabControl.TabPaintEventArgs)
  120.         <Description("Occurs when the Tab Border has been painted.")> _
  121.         Friend Event TabPaintBorder(ByVal sender As Object, ByVal e As TabControl.TabPaintEventArgs)
  122.         Friend Event SelectedChanged As EventHandler
  123.         Friend Sub New(ByVal Owner As TabControl)
  124.             TabControl = Owner
  125.         End Sub
  126.         <Description("Create a new TabPage and adds it to the collection whit the Form associated and returns the created TabPage.")> _
  127.         Public Function Add(ByVal Form As Form) As TabPage
  128.             Dim TabPage As New TabPage(Form)
  129.             TabPage.SuspendLayout()
  130.             TabControl.SuspendLayout()
  131.             ' Initialize all the tabpage defaults values 
  132.             TabControl.AddingPage = True
  133.             TabPage.BackHighColor = TabControl.TabBackHighColor
  134.             TabPage.BackHighColorDisabled = TabControl.TabBackHighColorDisabled
  135.             TabPage.BackLowColor = TabControl.TabBackLowColor
  136.             TabPage.BackLowColorDisabled = TabControl.TabBackLowColorDisabled
  137.             TabPage.BorderColor = TabControl.BorderColor
  138.             TabPage.BorderColorDisabled = TabControl.BorderColorDisabled
  139.             TabPage.ForeColor = TabControl.ForeColor
  140.             TabPage.ForeColorDisabled = TabControl.ForeColorDisabled
  141.             TabPage.MaximumWidth = TabControl.TabMaximumWidth
  142.             TabPage.MinimumWidth = TabControl.TabMinimumWidth
  143.             TabPage.PadLeft = TabControl.TabPadLeft
  144.             TabPage.PadRight = TabControl.TabPadRight
  145.             TabPage.CloseButtonVisible = TabControl.TabCloseButtonVisible
  146.             TabPage.CloseButtonImage = TabControl.TabCloseButtonImage
  147.             TabPage.CloseButtonImageHot = TabControl.TabCloseButtonImageHot
  148.             TabPage.CloseButtonImageDisabled = TabControl.TabCloseButtonImageDisabled
  149.             TabPage.CloseButtonSize = TabControl.TabCloseButtonSize
  150.             TabPage.CloseButtonBackHighColor = TabControl.TabCloseButtonBackHighColor
  151.             TabPage.CloseButtonBackLowColor = TabControl.TabCloseButtonBackLowColor
  152.             TabPage.CloseButtonBorderColor = TabControl.TabCloseButtonBorderColor
  153.             TabPage.CloseButtonForeColor = TabControl.TabCloseButtonForeColor
  154.             TabPage.CloseButtonBackHighColorDisabled = TabControl.TabCloseButtonBackHighColorDisabled
  155.             TabPage.CloseButtonBackLowColorDisabled = TabControl.TabCloseButtonBackLowColorDisabled
  156.             TabPage.CloseButtonBorderColorDisabled = TabControl.TabCloseButtonBorderColorDisabled
  157.             TabPage.CloseButtonForeColorDisabled = TabControl.TabCloseButtonForeColorDisabled
  158.             TabPage.CloseButtonBackHighColorHot = TabControl.TabCloseButtonBackHighColorHot
  159.             TabPage.CloseButtonBackLowColorHot = TabControl.TabCloseButtonBackLowColorHot
  160.             TabPage.CloseButtonBorderColorHot = TabControl.TabCloseButtonBorderColorHot
  161.             TabPage.CloseButtonForeColorHot = TabControl.TabCloseButtonForeColorHot
  162.             TabPage.HotTrack = TabControl.HotTrack
  163.             TabPage.Font = TabControl.Font
  164.             TabPage.FontBoldOnSelect = TabControl.FontBoldOnSelect
  165.             TabPage.IconSize = TabControl.TabIconSize
  166.             TabPage.SmoothingMode = TabControl.SmoothingMode
  167.             TabPage.Alignment = TabControl.Alignment
  168.             TabPage.GlassGradient = TabControl.TabGlassGradient
  169.             TabPage.BorderEnhanced = TabControl.m_TabBorderEnhanced
  170.             TabPage.RenderMode = TabControl.RenderMode
  171.             TabPage.BorderEnhanceWeight = TabControl.TabBorderEnhanceWeight
  172.             TabPage.Top = 0
  173.             TabPage.Left = TabControl.LeftOffset
  174.             TabPage.Height = TabControl.TabHeight
  175.             TabControl.TabToolTip.SetToolTip(TabPage, TabPage.m_Form.Text)
  176.             ' Create the event handles 
  177.             AddHandler TabPage.Click, AddressOf TabPage_Clicked
  178.             AddHandler TabPage.Close, AddressOf TabPage_Closed
  179.             AddHandler TabPage.GetTabRegion, AddressOf TabPage_GetTabRegion
  180.             AddHandler TabPage.TabPaintBackground, AddressOf TabPage_TabPaintBackground
  181.             AddHandler TabPage.TabPaintBorder, AddressOf TabPage_TabPaintBorder
  182.             AddHandler TabPage.SizeChanged, AddressOf TabPage_SizeChanged
  183.             AddHandler TabPage.Draging, AddressOf TabPage_Draging
  184.             AddHandler TabPage.EnterForm, AddressOf TabPage_Enter
  185.             AddHandler TabPage.LeaveForm, AddressOf TabPage_Leave
  186.             ' Insert the tabpage in the collection
  187.             List.Add(TabPage)
  188.             TabControl.ResumeLayout()
  189.             TabPage.ResumeLayout()
  190.             Return TabPage
  191.         End Function
  192.         <Description("Removes a TabPage from the collection.")> _
  193.         Public Sub Remove(ByVal TabPage As TabPage)
  194.             Try
  195.                 TabControl.IsDelete = True
  196.                 If TabControl.pnlBottom.Controls.Count > 1 Then
  197.                     ' brings the next top tab
  198.                     ' first dock the form in the body then display it
  199.                     TabControl.pnlBottom.Controls(1).Dock = DockStyle.Fill
  200.                     TabControl.pnlBottom.Controls(1).Visible = True
  201.                 End If
  202.                 List.Remove(TabPage)
  203.             Catch ex As Exception
  204.             End Try
  205.         End Sub
  206.         <Description("Gets a TabPage in the position Index from the collection.")> _
  207.         Default Public ReadOnly Property Item(ByVal Index As Integer) As TabPage
  208.             Get
  209.                 Return List.Item(Index)
  210.             End Get
  211.         End Property
  212.         <Description("Gets a TabPage associated with the Form from the collection.")> _
  213.         Default Public ReadOnly Property Item(ByVal Form As Form) As TabPage
  214.             Get
  215.                 Dim x As Integer = IndexOf(Form)
  216.                 If x = -1 Then
  217.                     Return Nothing
  218.                 Else
  219.                     Return List.Item(x)
  220.                 End If
  221.             End Get
  222.         End Property
  223.         <Description("Returns the index of the specified TabPage in the collection.")> _
  224.         Public Property IndexOf(ByVal TabPage As TabPage) As Integer
  225.             Get
  226.                 Return List.IndexOf(TabPage)
  227.             End Get
  228.             Set(ByVal value As Integer)
  229.                 IsReorder = True
  230.                 List.Remove(TabPage)
  231.                 List.Insert(value, TabPage)
  232.                 TabControl.ArrangeItems()
  233.                 IsReorder = False
  234.             End Set
  235.         End Property
  236.         <Description("Returns the index of the specified TabPage associated with the Form in the collection.")> _
  237.         Public ReadOnly Property IndexOf(ByVal Form As Form) As Integer
  238.             Get
  239.                 Dim ret As Integer = -1
  240.                 For i As Integer = 0 To List.Count - 1
  241.                     If DirectCast(List(i), TabPage).m_Form.Equals(Form) Then
  242.                         ret = i
  243.                         Exit For
  244.                     End If
  245.                 Next
  246.                 Return ret
  247.             End Get
  248.         End Property
  249.         Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
  250.             MyBase.OnInsertComplete(index, value)
  251.             If IsReorder Then Exit Sub
  252.             ' insert the controls in the respective containers
  253.             TabControl.pnlBottom.Controls.Add(DirectCast(value, TabPage).m_Form)
  254.             TabControl.pnlTabs.Controls.Add(DirectCast(value, TabPage))
  255.             ' select the inserted tabpage
  256.             DirectCast(value, TabPage).Select()
  257.             TabControl.AddingPage = False
  258.             TabControl.ArrangeItems()
  259.             TabControl.Background.Visible = False
  260.         End Sub
  261.         Protected Overrides Sub OnRemoveComplete(ByVal index As Integer, ByVal value As Object)
  262.             MyBase.OnRemoveComplete(index, value)
  263.             If IsReorder Then Exit Sub
  264.             If List.Count = 0 Then TabControl.Background.Visible = True
  265.             TabControl.ArrangeItems()
  266.             TabControl.pnlBottom.Controls.Remove(DirectCast(value, TabPage).m_Form)
  267.             DirectCast(value, TabPage).m_Form.Dispose()
  268.             TabControl.pnlTabs.Controls.Remove(DirectCast(value, TabPage))
  269.             DirectCast(value, TabPage).Dispose()
  270.             TabControl.SelectItem(Nothing)
  271.         End Sub
  272.         Protected Overrides Sub OnClear()
  273.             MyBase.OnClear()
  274.             TabControl.Background.Visible = True
  275.         End Sub
  276.         Protected Overrides Sub OnClearComplete()
  277.             MyBase.OnClearComplete()
  278.             TabControl.pnlBottom.Controls.Clear()
  279.             TabControl.pnlTabs.Controls.Clear()
  280.         End Sub
  281.         <Description("Returns the selected TabPage.")> _
  282.         Public Function SelectedTab() As TabPage
  283.             For Each T As TabPage In List
  284.                 If T.IsSelected Then Return T
  285.             Next
  286.             Return Nothing
  287.         End Function
  288.         <Description("Returns the index of the selected TabPage.")> _
  289.         Public Function SelectedIndex() As Integer
  290.             For Each T As TabPage In List
  291.                 If T.IsSelected Then Return List.IndexOf(T)
  292.             Next
  293.         End Function
  294.         Private Sub TabPage_Clicked(ByVal sender As Object, ByVal e As EventArgs)
  295.             TabControl.SelectItem(sender)
  296.             RaiseEvent SelectedChanged(sender, e)
  297.         End Sub
  298.         Private Sub TabPage_Closed(ByVal sender As Object, ByVal e As EventArgs)
  299.             Remove(sender)
  300.         End Sub
  301.         Private Sub TabPage_GetTabRegion(ByVal sender As Object, ByVal e As TabControl.GetTabRegionEventArgs)
  302.             RaiseEvent GetTabRegion(sender, e)
  303.         End Sub
  304.         Private Sub TabPage_TabPaintBackground(ByVal sender As Object, ByVal e As TabControl.TabPaintEventArgs)
  305.             RaiseEvent TabPaintBackground(sender, e)
  306.         End Sub
  307.         Private Sub TabPage_TabPaintBorder(ByVal sender As Object, ByVal e As TabControl.TabPaintEventArgs)
  308.             RaiseEvent TabPaintBorder(sender, e)
  309.         End Sub
  310.         Private Sub TabPage_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
  311.             TabControl.ArrangeItems()
  312.         End Sub
  313.         Private Sub TabPage_Draging(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
  314.             If TabControl.AllowTabReorder AndAlso e.Button = Windows.Forms.MouseButtons.Left Then
  315.                 Dim t As TabPage = GetTabPage(DirectCast(sender, TabPage), e.X, e.Y)
  316.                 If t IsNot Nothing Then
  317.                     ' swap the tabpages
  318.                     IndexOf(t) = IndexOf(DirectCast(sender, TabPage))
  319.                 End If
  320.             End If
  321.         End Sub
  322.         Private Function GetTabPage(ByVal TabPage As TabPage, ByVal x As Integer, ByVal y As Integer) As TabPage
  323.             For i As Integer = 0 To List.Count - 1
  324.                 If DirectCast(List(i), TabPage) IsNot TabPage AndAlso DirectCast(List(i), TabPage).TabVisible Then
  325.                     If DirectCast(List(i), TabPage).RectangleToScreen(DirectCast(List(i), TabPage).ClientRectangle).Contains(TabPage.PointToScreen(New Point(x, y))) Then
  326.                         Return DirectCast(List(i), TabPage)
  327.                     End If
  328.                 End If
  329.             Next
  330.             Return Nothing
  331.         End Function
  332.         Sub TabPage_Enter(ByVal sender As Object, ByVal e As EventArgs)
  333.             If Not TabControl.m_Focused Then
  334.                 TabControl.SetFocus = True
  335.             End If
  336.         End Sub
  337.         Sub TabPage_Leave(ByVal sender As Object, ByVal e As EventArgs)
  338.             If TabControl.m_Focused Then
  339.                 TabControl.SetFocus = False
  340.             End If
  341.         End Sub
  342.     End Class
  343. #End Region
  344.     <Description("Gets or sets the specified alignment for the control.")> _
  345.     Public Enum TabAlignment
  346.         Top = 0
  347.         Bottom = 1
  348.     End Enum
  349.     <Description("Gets or sets the specified direction for the control.")> _
  350.     Public Enum FlowDirection
  351.         LeftToRight = 0
  352.         RightToLeft = 2
  353.     End Enum
  354.     Public Enum Weight
  355.         Soft = 2
  356.         Medium = 3
  357.         Strong = 4
  358.         Strongest = 5
  359.     End Enum
  360.     Private AddingPage As Boolean = False
  361.     Private LeftOffset As Integer = 3
  362.     Private IsDelete As Boolean = False
  363.     Private Background As New System.Windows.Forms.Panel
  364.     Private WithEvents Items As New TabPageCollection(Me)
  365.     Private m_TabsDirection As FlowDirection = FlowDirection.LeftToRight
  366.     Private m_TabMaximumWidth As Integer = 200
  367.     Private m_tabMinimumWidth As Integer = 100
  368.     Private m_BackLowColor As Color
  369.     Private m_BackHighColor As Color
  370.     Private m_BorderColor As Color
  371.     Private m_TabBackHighColor As Color
  372.     Private m_TabBackLowColor As Color
  373.     Private m_TabBackHighColorDisabled As Color
  374.     Private m_TabBackLowColorDisabled As Color
  375.     Private m_BorderColorDisabled As Color
  376.     Private m_ForeColorDisabled As Color
  377.     Private m_TopSeparator As Boolean = True
  378.     Private m_TabTop As Integer = 3
  379.     Private m_TabHeight As Integer = 28
  380.     Private m_TabOffset As Integer = 3
  381.     Private m_TabPadLeft As Integer = 5
  382.     Private m_TabPadRight As Integer = 5
  383.     Private m_TabSmoothingMode = Drawing2D.SmoothingMode.None
  384.     Private m_TabIconSize As Size = New Size(16, 16)
  385.     Private m_Alignment As TabAlignment = TabAlignment.Top
  386.     Private m_FontBoldOnSelect As Boolean = True
  387.     Private m_HotTrack As Boolean = True
  388.     Private m_TabCloseButtonSize As Size = New Size(17, 17)
  389.     Private m_TabCloseButtonVisible As Boolean = True
  390.     Private m_TabCloseButtonImage As Image
  391.     Private m_TabCloseButtonImageHot As Image
  392.     Private m_TabCloseButtonImageDisabled As Image
  393.     Private m_TabCloseButtonBackHighColor As Color
  394.     Private m_TabCloseButtonBackLowColor As Color
  395.     Private m_TabCloseButtonBorderColor As Color
  396.     Private m_TabCloseButtonForeColor As Color
  397.     Private m_TabCloseButtonBackHighColorDisabled As Color
  398.     Private m_TabCloseButtonBackLowColorDisabled As Color
  399.     Private m_TabCloseButtonBorderColorDisabled As Color
  400.     Private m_TabCloseButtonForeColorDisabled As Color
  401.     Private m_TabCloseButtonBackHighColorHot As Color
  402.     Private m_TabCloseButtonBackLowColorHot As Color
  403.     Private m_TabCloseButtonBorderColorHot As Color
  404.     Private m_TabCloseButtonForeColorHot As Color
  405.     Private m_AllowTabReorder As Boolean = True
  406.     Private m_TabGlassGradient As Boolean = False
  407.     Private m_TabBorderEnhanced As Boolean = False
  408.     Private m_RenderMode As ToolStripRenderMode
  409.     Private m_ContextMenuRenderer As ToolStripRenderer
  410.     Private m_TabBorderEnhanceWeight As Weight = Weight.Medium
  411.     Private m_Focused As Boolean
  412.     Friend Shadows ReadOnly defaultPadding As Padding = New Padding(0, 0, 0, 0)
  413.     Friend ReadOnly defaultBackLowColor As Color = SystemColors.ControlLightLight
  414.     Friend ReadOnly defaultBackHighColor As Color = SystemColors.Control
  415.     Friend ReadOnly defaultBorderColor As Color = SystemColors.ControlDarkDark
  416.     Friend ReadOnly defaultTabBackHighColor As Color = SystemColors.Window
  417.     Friend ReadOnly defaultTabBackLowColor As Color = SystemColors.Control
  418.     Friend ReadOnly defaultTabBackHighColorDisabled As Color = SystemColors.Control
  419.     Friend ReadOnly defaultTabBackLowColorDisabled As Color = SystemColors.ControlDark
  420.     Friend ReadOnly defaultBorderColorDisabled As Color = SystemColors.ControlDark
  421.     Friend ReadOnly defaultForeColorDisabled As Color = SystemColors.ControlText
  422.     Friend ReadOnly defaultControlButtonBackHighColor As Color = SystemColors.GradientInactiveCaption
  423.     Friend ReadOnly defaultControlButtonBackLowColor As Color = SystemColors.GradientInactiveCaption
  424.     Friend ReadOnly defaultControlButtonBorderColor As Color = SystemColors.HotTrack
  425.     Friend ReadOnly defaultControlButtonForeColor As Color = SystemColors.ControlText
  426.     Friend ReadOnly defaultTabCloseButtonSize As Size = New Size(17, 17)
  427.     Friend ReadOnly defaultTabIconSize As Size = New Size(16, 16)
  428.     Friend ReadOnly defaultTabCloseButtonBackHighColor As Color = System.Drawing.Color.IndianRed
  429.     Friend ReadOnly defaultTabCloseButtonBackHighColorDisabled As Color = System.Drawing.Color.LightGray
  430.     Friend ReadOnly defaultTabCloseButtonBackHighColorHot As Color = System.Drawing.Color.LightCoral
  431.     Friend ReadOnly defaultTabCloseButtonBackLowColor As Color = System.Drawing.Color.Firebrick
  432.     Friend ReadOnly defaultTabCloseButtonBackLowColorDisabled As Color = System.Drawing.Color.DarkGray
  433.     Friend ReadOnly defaultTabCloseButtonBackLowColorHot As Color = System.Drawing.Color.IndianRed
  434.     Friend ReadOnly defaultTabCloseButtonBorderColor As Color = System.Drawing.Color.DarkRed
  435.     Friend ReadOnly defaultTabCloseButtonBorderColorDisabled As Color = System.Drawing.Color.Gray
  436.     Friend ReadOnly defaultTabCloseButtonBorderColorHot As Color = System.Drawing.Color.Firebrick
  437.     Friend ReadOnly defaultTabCloseButtonForeColor As Color = System.Drawing.Color.White
  438.     Friend ReadOnly defaultTabCloseButtonForeColorDisabled As Color = System.Drawing.Color.White
  439.     Friend ReadOnly defaultTabCloseButtonForeColorHot As Color = System.Drawing.Color.White
  440.     Friend ReadOnly defaultRenderMode As ToolStripRenderMode = ToolStripRenderMode.ManagerRenderMode
  441.     <Description("Occurs when the Tab Page requests the tab region.")> _
  442.     Public Event GetTabRegion(ByVal sender As Object, ByVal e As GetTabRegionEventArgs)
  443.     <Description("Occurs when the Tab Background has been painted.")> _
  444.     Public Event TabPaintBackground(ByVal sender As Object, ByVal e As TabPaintEventArgs)
  445.     <Description("Occurs when the Tab Border has been painted.")> _
  446.     Public Event TabPaintBorder(ByVal sender As Object, ByVal e As TabPaintEventArgs)
  447.     <Description("Occurs when the TabControl Focus changes.")> _
  448.     Public Event FocusedChanged As EventHandler
  449.     Public Event SelectedTabChanged As EventHandler
  450.     Public Sub New()
  451.         ' This call is required by the Windows Form Designer.
  452.         InitializeComponent()
  453.         ' Add any initialization after the InitializeComponent() call.
  454.         Me.SuspendLayout()
  455.         'Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
  456.         'Me.SetStyle(ControlStyles.UserPaint, True)
  457.         Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
  458.         Background.BackColor = SystemColors.AppWorkspace
  459.         Background.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
  460.         Background.Dock = DockStyle.Fill
  461.         Me.Controls.Add(Background)
  462.         Background.BringToFront()
  463.         ResetBackLowColor()
  464.         ResetBackHighColor()
  465.         ResetBorderColor()
  466.         ResetTabBackHighColor()
  467.         ResetTabBackLowColor()
  468.         ResetTabBackHighColorDisabled()
  469.         ResetTabBackLowColorDisabled()
  470.         ResetBorderColorDisabled()
  471.         ResetForeColorDisabled()
  472.         ResetControlButtonBackHighColor()
  473.         ResetControlButtonBackLowColor()
  474.         ResetControlButtonBorderColor()
  475.         ResetControlButtonForeColor()
  476.         ResetTabCloseButtonBackHighColor()
  477.         ResetTabCloseButtonBackLowColor()
  478.         ResetTabCloseButtonBorderColor()
  479.         ResetTabCloseButtonForeColor()
  480.         ResetTabCloseButtonBackHighColorDisabled()
  481.         ResetTabCloseButtonBackLowColorDisabled()
  482.         ResetTabCloseButtonBorderColorDisabled()
  483.         ResetTabCloseButtonForeColorDisabled()
  484.         ResetTabCloseButtonBackHighColorHot()
  485.         ResetTabCloseButtonBackLowColorHot()
  486.         ResetTabCloseButtonBorderColorHot()
  487.         ResetTabCloseButtonForeColorHot()
  488.         ResetPadding()
  489.         ResetTabCloseButtonSize()
  490.         ResetTabIconSize()
  491.         ResetRenderMode()
  492.         AdjustHeight()
  493.         DropButton.RenderMode = Me.RenderMode
  494.         CloseButton.RenderMode = Me.RenderMode
  495.         Me.ResumeLayout()
  496.     End Sub
  497.     <Browsable(False)> _
  498.     Public Overrides ReadOnly Property Focused() As Boolean
  499.         Get
  500.             Return m_Focused
  501.         End Get
  502.     End Property
  503.     Friend WriteOnly Property SetFocus() As Boolean
  504.         Set(ByVal value As Boolean)
  505.             m_Focused = value
  506.             RaiseEvent FocusedChanged(Me, New EventArgs)
  507.         End Set
  508.     End Property
  509.     <Browsable(False)> _
  510.     Public ReadOnly Property SelectedForm() As Object
  511.         Get
  512.             If pnlBottom.Controls.Count > 0 Then
  513.                 Return pnlBottom.Controls(0)
  514.             Else
  515.                 Return Nothing
  516.             End If
  517.         End Get
  518.     End Property
  519.     <Browsable(True), Category("Layout"), DefaultValue(FlowDirection.LeftToRight), Description("Gets or sets the the direction which the tabs are drawn.")> _
  520.     Public Property TabsDirection() As FlowDirection
  521.         Get
  522.             Return m_TabsDirection
  523.         End Get
  524.         Set(ByVal value As FlowDirection)
  525.             m_TabsDirection = value
  526.             SelectItem(Nothing)
  527.         End Set
  528.     End Property
  529.     <Browsable(True), Category("Appearance"), DefaultValue(False), Description("Gets or sets if the tab background will paint with glass style.")> _
  530.     Public Property TabGlassGradient() As Boolean
  531.         Get
  532.             Return m_TabGlassGradient
  533.         End Get
  534.         Set(ByVal Value As Boolean)
  535.             m_TabGlassGradient = Value
  536.             For Each t As TabPage In TabPages
  537.                 t.GlassGradient = Value
  538.             Next
  539.         End Set
  540.     End Property
  541.     <Browsable(True), Category("Appearance"), DefaultValue(False), Description("Gets or sets if the tab border will paint with enhanced style.")> _
  542.     Public Property TabBorderEnhanced() As Boolean
  543.         Get
  544.             Return m_TabBorderEnhanced
  545.         End Get
  546.         Set(ByVal Value As Boolean)
  547.             m_TabBorderEnhanced = Value
  548.             For Each t As TabPage In TabPages
  549.                 t.BorderEnhanced = Value
  550.             Next
  551.         End Set
  552.     End Property
  553.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for the tab close button.")> _
  554.     Public Property TabCloseButtonBackHighColor() As System.Drawing.Color
  555.         Get
  556.             Return m_TabCloseButtonBackHighColor
  557.         End Get
  558.         Set(ByVal Value As Color)
  559.             m_TabCloseButtonBackHighColor = Value
  560.         End Set
  561.     End Property
  562.     Friend Function ShouldSerializeTabCloseButtonBackHighColor() As Boolean
  563.         Return m_TabCloseButtonBackHighColor <> Me.defaultTabCloseButtonBackHighColor
  564.     End Function
  565.     Friend Sub ResetTabCloseButtonBackHighColor()
  566.         m_TabCloseButtonBackHighColor = Me.defaultTabCloseButtonBackHighColor
  567.     End Sub
  568.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for the tab close button.")> _
  569.     Public Property TabCloseButtonBackLowColor() As System.Drawing.Color
  570.         Get
  571.             Return m_TabCloseButtonBackLowColor
  572.         End Get
  573.         Set(ByVal Value As Color)
  574.             m_TabCloseButtonBackLowColor = Value
  575.         End Set
  576.     End Property
  577.     Friend Function ShouldSerializeTabCloseButtonBackLowColor() As Boolean
  578.         Return m_TabCloseButtonBackLowColor <> Me.defaultTabCloseButtonBackLowColor
  579.     End Function
  580.     Friend Sub ResetTabCloseButtonBackLowColor()
  581.         m_TabCloseButtonBackLowColor = Me.defaultTabCloseButtonBackLowColor
  582.     End Sub
  583.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color for the tab close button.")> _
  584.     Public Property TabCloseButtonBorderColor() As System.Drawing.Color
  585.         Get
  586.             Return m_TabCloseButtonBorderColor
  587.         End Get
  588.         Set(ByVal Value As Color)
  589.             m_TabCloseButtonBorderColor = Value
  590.         End Set
  591.     End Property
  592.     Friend Function ShouldSerializeTabCloseButtonBorderColor() As Boolean
  593.         Return m_TabCloseButtonBorderColor <> Me.defaultTabCloseButtonBorderColor
  594.     End Function
  595.     Friend Sub ResetTabCloseButtonBorderColor()
  596.         m_TabCloseButtonBorderColor = Me.defaultTabCloseButtonBorderColor
  597.     End Sub
  598.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the fore color for the tab close button.")> _
  599.     Public Property TabCloseButtonForeColor() As System.Drawing.Color
  600.         Get
  601.             Return m_TabCloseButtonForeColor
  602.         End Get
  603.         Set(ByVal Value As Color)
  604.             m_TabCloseButtonForeColor = Value
  605.         End Set
  606.     End Property
  607.     Friend Function ShouldSerializeTabCloseButtonForeColor() As Boolean
  608.         Return m_TabCloseButtonForeColor <> Me.defaultTabCloseButtonForeColor
  609.     End Function
  610.     Friend Sub ResetTabCloseButtonForeColor()
  611.         m_TabCloseButtonForeColor = Me.defaultTabCloseButtonForeColor
  612.     End Sub
  613.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for the disabled tab close button.")> _
  614.     Public Property TabCloseButtonBackHighColorDisabled() As System.Drawing.Color
  615.         Get
  616.             Return m_TabCloseButtonBackHighColorDisabled
  617.         End Get
  618.         Set(ByVal Value As Color)
  619.             m_TabCloseButtonBackHighColorDisabled = Value
  620.         End Set
  621.     End Property
  622.     Friend Function ShouldSerializeTabCloseButtonBackHighColorDisabled() As Boolean
  623.         Return m_TabCloseButtonBackHighColorDisabled <> Me.defaultTabCloseButtonBackHighColorDisabled
  624.     End Function
  625.     Friend Sub ResetTabCloseButtonBackHighColorDisabled()
  626.         m_TabCloseButtonBackHighColorDisabled = Me.defaultTabCloseButtonBackHighColorDisabled
  627.     End Sub
  628.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for the disabled tab close button.")> _
  629.     Public Property TabCloseButtonBackLowColorDisabled() As System.Drawing.Color
  630.         Get
  631.             Return m_TabCloseButtonBackLowColorDisabled
  632.         End Get
  633.         Set(ByVal Value As Color)
  634.             m_TabCloseButtonBackLowColorDisabled = Value
  635.         End Set
  636.     End Property
  637.     Friend Function ShouldSerializeTabCloseButtonBackLowColorDisabled() As Boolean
  638.         Return m_TabCloseButtonBackLowColorDisabled <> Me.defaultTabCloseButtonBackLowColorDisabled
  639.     End Function
  640.     Friend Sub ResetTabCloseButtonBackLowColorDisabled()
  641.         m_TabCloseButtonBackLowColorDisabled = Me.defaultTabCloseButtonBackLowColorDisabled
  642.     End Sub
  643.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color for the disabled tab close button.")> _
  644.     Public Property TabCloseButtonBorderColorDisabled() As System.Drawing.Color
  645.         Get
  646.             Return m_TabCloseButtonBorderColorDisabled
  647.         End Get
  648.         Set(ByVal Value As Color)
  649.             m_TabCloseButtonBorderColorDisabled = Value
  650.         End Set
  651.     End Property
  652.     Friend Function ShouldSerializeTabCloseButtonBorderColorDisabled() As Boolean
  653.         Return m_TabCloseButtonBorderColorDisabled <> Me.defaultTabCloseButtonBorderColorDisabled
  654.     End Function
  655.     Friend Sub ResetTabCloseButtonBorderColorDisabled()
  656.         m_TabCloseButtonBorderColorDisabled = Me.defaultTabCloseButtonBorderColorDisabled
  657.     End Sub
  658.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the disabled fore color for the tab close button.")> _
  659.     Public Property TabCloseButtonForeColorDisabled() As System.Drawing.Color
  660.         Get
  661.             Return m_TabCloseButtonForeColorDisabled
  662.         End Get
  663.         Set(ByVal Value As Color)
  664.             m_TabCloseButtonForeColorDisabled = Value
  665.         End Set
  666.     End Property
  667.     Friend Function ShouldSerializeTabCloseButtonForeColorDisabled() As Boolean
  668.         Return m_TabCloseButtonForeColorDisabled <> Me.defaultTabCloseButtonForeColorDisabled
  669.     End Function
  670.     Friend Sub ResetTabCloseButtonForeColorDisabled()
  671.         m_TabCloseButtonForeColorDisabled = Me.defaultTabCloseButtonForeColorDisabled
  672.     End Sub
  673.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for the Hot tab close button.")> _
  674.     Public Property TabCloseButtonBackHighColorHot() As System.Drawing.Color
  675.         Get
  676.             Return m_TabCloseButtonBackHighColorHot
  677.         End Get
  678.         Set(ByVal Value As Color)
  679.             m_TabCloseButtonBackHighColorHot = Value
  680.         End Set
  681.     End Property
  682.     Friend Function ShouldSerializeTabCloseButtonBackHighColorHot() As Boolean
  683.         Return m_TabCloseButtonBackHighColorHot <> Me.defaultTabCloseButtonBackHighColorHot
  684.     End Function
  685.     Friend Sub ResetTabCloseButtonBackHighColorHot()
  686.         m_TabCloseButtonBackHighColorHot = Me.defaultTabCloseButtonBackHighColorHot
  687.     End Sub
  688.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for the Hot tab close button.")> _
  689.     Public Property TabCloseButtonBackLowColorHot() As System.Drawing.Color
  690.         Get
  691.             Return m_TabCloseButtonBackLowColorHot
  692.         End Get
  693.         Set(ByVal Value As Color)
  694.             m_TabCloseButtonBackLowColorHot = Value
  695.         End Set
  696.     End Property
  697.     Friend Function ShouldSerializeTabCloseButtonBackLowColorHot() As Boolean
  698.         Return m_TabCloseButtonBackLowColorHot <> Me.defaultTabCloseButtonBackLowColorHot
  699.     End Function
  700.     Friend Sub ResetTabCloseButtonBackLowColorHot()
  701.         m_TabCloseButtonBackLowColorHot = Me.defaultTabCloseButtonBackLowColorHot
  702.     End Sub
  703.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color for the Hot tab close button.")> _
  704.     Public Property TabCloseButtonBorderColorHot() As System.Drawing.Color
  705.         Get
  706.             Return m_TabCloseButtonBorderColorHot
  707.         End Get
  708.         Set(ByVal Value As Color)
  709.             m_TabCloseButtonBorderColorHot = Value
  710.         End Set
  711.     End Property
  712.     Friend Function ShouldSerializeTabCloseButtonBorderColorHot() As Boolean
  713.         Return m_TabCloseButtonBorderColorHot <> Me.defaultTabCloseButtonBorderColorHot
  714.     End Function
  715.     Friend Sub ResetTabCloseButtonBorderColorHot()
  716.         m_TabCloseButtonBorderColorHot = Me.defaultTabCloseButtonBorderColorHot
  717.     End Sub
  718.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the Hot fore color for the tab close button.")> _
  719.     Public Property TabCloseButtonForeColorHot() As System.Drawing.Color
  720.         Get
  721.             Return m_TabCloseButtonForeColorHot
  722.         End Get
  723.         Set(ByVal Value As Color)
  724.             m_TabCloseButtonForeColorHot = Value
  725.         End Set
  726.     End Property
  727.     Friend Function ShouldSerializeTabCloseButtonForeColorHot() As Boolean
  728.         Return m_TabCloseButtonForeColorHot <> Me.defaultTabCloseButtonForeColorHot
  729.     End Function
  730.     Friend Sub ResetTabCloseButtonForeColorHot()
  731.         m_TabCloseButtonForeColorHot = Me.defaultTabCloseButtonForeColorHot
  732.     End Sub
  733.     <Browsable(True), Category("Appearance"), Description("Gets or sets the tab close button image.")> _
  734.     Public Property TabCloseButtonImage() As Image
  735.         Get
  736.             Return m_TabCloseButtonImage
  737.         End Get
  738.         Set(ByVal value As Image)
  739.             m_TabCloseButtonImage = value
  740.             For Each t As TabPage In TabPages
  741.                 t.CloseButtonImage = value
  742.             Next
  743.         End Set
  744.     End Property
  745.     <Browsable(True), Category("Appearance"), Description("Gets or sets the tab close button image in hot state.")> _
  746.     Public Property TabCloseButtonImageHot() As Image
  747.         Get
  748.             Return m_TabCloseButtonImageHot
  749.         End Get
  750.         Set(ByVal value As Image)
  751.             m_TabCloseButtonImageHot = value
  752.             For Each t As TabPage In TabPages
  753.                 t.CloseButtonImageHot = value
  754.             Next
  755.         End Set
  756.     End Property
  757.     <Browsable(True), Category("Appearance"), Description("Gets or sets the tab close button image in disabled state.")> _
  758.     Public Property TabCloseButtonImageDisabled() As Image
  759.         Get
  760.             Return m_TabCloseButtonImageDisabled
  761.         End Get
  762.         Set(ByVal value As Image)
  763.             m_TabCloseButtonImageDisabled = value
  764.             For Each t As TabPage In TabPages
  765.                 t.CloseButtonImageDisabled = value
  766.             Next
  767.         End Set
  768.     End Property
  769.     <Browsable(True), Category("Layout"), DefaultValue(True), Description("Gets or sets whether the tab close button is visble or not.")> _
  770.     Public Property TabCloseButtonVisible() As Boolean
  771.         Get
  772.             Return m_TabCloseButtonVisible
  773.         End Get
  774.         Set(ByVal value As Boolean)
  775.             m_TabCloseButtonVisible = value
  776.             For Each t As TabPage In TabPages
  777.                 t.CloseButtonVisible = value
  778.             Next
  779.         End Set
  780.     End Property
  781.     <Browsable(True), Category("Appearance"), Description("Gets or sets the size of the icon displayed at the tab.")> _
  782.     Public Property TabIconSize() As Size
  783.         Get
  784.             Return m_TabIconSize
  785.         End Get
  786.         Set(ByVal value As Size)
  787.             m_TabIconSize = value
  788.             For Each t As TabPage In TabPages
  789.                 t.IconSize = value
  790.             Next
  791.         End Set
  792.     End Property
  793.     Friend Function ShouldSerializeTabIconSize() As Boolean
  794.         Return m_TabIconSize <> Me.defaultTabIconSize
  795.     End Function
  796.     Friend Sub ResetTabIconSize()
  797.         m_TabIconSize = Me.defaultTabIconSize
  798.     End Sub
  799.     <Browsable(True), Category("Appearance"), Description("Gets or sets the size of the close button displayed at the tab.")> _
  800.     Public Property TabCloseButtonSize() As Size
  801.         Get
  802.             Return m_TabCloseButtonSize
  803.         End Get
  804.         Set(ByVal value As Size)
  805.             m_TabCloseButtonSize = value
  806.             For Each t As TabPage In TabPages
  807.                 t.CloseButtonSize = value
  808.             Next
  809.         End Set
  810.     End Property
  811.     Friend Function ShouldSerializeTabCloseButtonSize() As Boolean
  812.         Return m_TabCloseButtonSize <> Me.defaultTabCloseButtonSize
  813.     End Function
  814.     Friend Sub ResetTabCloseButtonSize()
  815.         m_TabCloseButtonSize = Me.defaultTabCloseButtonSize
  816.     End Sub
  817.     <Browsable(True), Category("Appearance"), DefaultValue(Drawing2D.SmoothingMode.None), Description("Specifies whether smoothing (antialiasing) is applied to lines and curves and the edges of filled areas.")> _
  818.     Public Property SmoothingMode() As Drawing2D.SmoothingMode
  819.         Get
  820.             Return m_TabSmoothingMode
  821.         End Get
  822.         Set(ByVal value As Drawing2D.SmoothingMode)
  823.             m_TabSmoothingMode = value
  824.             For Each t As TabPage In TabPages
  825.                 t.SmoothingMode = value
  826.             Next
  827.         End Set
  828.     End Property
  829.     <Browsable(True), Category("Layout"), DefaultValue(5), Description("Gets or sets the amount of space on the right side of the tab.")> _
  830.     Public Property TabPadRight() As Integer
  831.         Get
  832.             Return m_TabPadRight
  833.         End Get
  834.         Set(ByVal value As Integer)
  835.             m_TabPadRight = value
  836.             For Each t As TabPage In TabPages
  837.                 t.PadRight = value
  838.             Next
  839.         End Set
  840.     End Property
  841.     <Browsable(True), Category("Layout"), DefaultValue(5), Description("Gets or sets the amount of space on the left side of the tab.")> _
  842.     Public Property TabPadLeft() As Integer
  843.         Get
  844.             Return m_TabPadLeft
  845.         End Get
  846.         Set(ByVal value As Integer)
  847.             m_TabPadLeft = value
  848.             For Each t As TabPage In TabPages
  849.                 t.PadLeft = value
  850.             Next
  851.         End Set
  852.     End Property
  853.     <Browsable(True), Category("Layout"), DefaultValue(3), Description("Gets or sets the amount of space between the tabs.")> _
  854.     Public Property TabOffset() As Integer
  855.         Get
  856.             Return m_TabOffset
  857.         End Get
  858.         Set(ByVal value As Integer)
  859.             m_TabOffset = value
  860.             ArrangeItems()
  861.         End Set
  862.     End Property
  863.     <Browsable(True), Category("Layout"), DefaultValue(28), Description("Gets or sets the height of the tab.")> _
  864.     Public Property TabHeight() As Integer
  865.         Get
  866.             Return m_TabHeight
  867.         End Get
  868.         Set(ByVal value As Integer)
  869.             If m_TabHeight <> value Then
  870.                 m_TabHeight = value
  871.                 pnlTabs.Height = m_TabHeight
  872.                 pnlTabs.Top = pnlTop.Height - pnlTabs.Height
  873.                 AdjustHeight()
  874.                 For Each t As TabPage In TabPages
  875.                     t.Height = value
  876.                 Next
  877.             End If
  878.         End Set
  879.     End Property
  880.     <Browsable(True), Category("Layout"), DefaultValue(3), Description("Gets or sets the distance between the top of the control and the top of the tab.")> _
  881.     Public Property TabTop() As Integer
  882.         Get
  883.             Return m_TabTop
  884.         End Get
  885.         Set(ByVal value As Integer)
  886.             m_TabTop = value
  887.             AdjustHeight()
  888.         End Set
  889.     End Property
  890.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient.")> _
  891.     Public Property TabBackHighColor() As System.Drawing.Color
  892.         Get
  893.             Return m_TabBackHighColor
  894.         End Get
  895.         Set(ByVal Value As Color)
  896.             m_TabBackHighColor = Value
  897.             For Each t As TabPage In TabPages
  898.                 t.BackHighColor = Value
  899.             Next
  900.         End Set
  901.     End Property
  902.     Friend Function ShouldSerializeTabBackHighColor() As Boolean
  903.         Return m_TabBackHighColor <> Me.defaultTabBackHighColor
  904.     End Function
  905.     Friend Sub ResetTabBackHighColor()
  906.         m_TabBackHighColor = Me.defaultTabBackHighColor
  907.     End Sub
  908.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient.")> _
  909.     Public Property TabBackLowColor() As Color
  910.         Get
  911.             Return m_TabBackLowColor
  912.         End Get
  913.         Set(ByVal Value As Color)
  914.             m_TabBackLowColor = Value
  915.             For Each t As TabPage In TabPages
  916.                 t.BackLowColor = Value
  917.             Next
  918.         End Set
  919.     End Property
  920.     Friend Function ShouldSerializeTabBackLowColor() As Boolean
  921.         Return m_TabBackLowColor <> Me.defaultTabBackLowColor
  922.     End Function
  923.     Friend Sub ResetTabBackLowColor()
  924.         m_TabBackLowColor = Me.defaultTabBackLowColor
  925.     End Sub
  926.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for a non selected tab.")> _
  927.         Public Property TabBackHighColorDisabled() As System.Drawing.Color
  928.         Get
  929.             Return m_TabBackHighColorDisabled
  930.         End Get
  931.         Set(ByVal Value As Color)
  932.             m_TabBackHighColorDisabled = Value
  933.             For Each t As TabPage In TabPages
  934.                 t.BackHighColorDisabled = Value
  935.             Next
  936.         End Set
  937.     End Property
  938.     Friend Function ShouldSerializeTabBackHighColorDisabled() As Boolean
  939.         Return m_TabBackHighColorDisabled <> Me.defaultTabBackHighColorDisabled
  940.     End Function
  941.     Friend Sub ResetTabBackHighColorDisabled()
  942.         m_TabBackHighColorDisabled = Me.defaultTabBackHighColorDisabled
  943.     End Sub
  944.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for a non selected tab.")> _
  945.     Public Property TabBackLowColorDisabled() As Color
  946.         Get
  947.             Return m_TabBackLowColorDisabled
  948.         End Get
  949.         Set(ByVal Value As Color)
  950.             m_TabBackLowColorDisabled = Value
  951.             For Each t As TabPage In TabPages
  952.                 t.BackLowColorDisabled = Value
  953.             Next
  954.         End Set
  955.     End Property
  956.     Friend Function ShouldSerializeTabBackLowColorDisabled() As Boolean
  957.         Return m_TabBackLowColorDisabled <> Me.defaultTabBackLowColorDisabled
  958.     End Function
  959.     Friend Sub ResetTabBackLowColorDisabled()
  960.         m_TabBackLowColorDisabled = Me.defaultTabBackLowColorDisabled
  961.     End Sub
  962.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color of the tab when not selected.")> _
  963.     Public Property BorderColorDisabled() As Color
  964.         Get
  965.             Return m_BorderColorDisabled
  966.         End Get
  967.         Set(ByVal Value As Color)
  968.             m_BorderColorDisabled = Value
  969.             For Each t As TabPage In TabPages
  970.                 t.BorderColorDisabled = Value
  971.             Next
  972.         End Set
  973.     End Property
  974.     Friend Function ShouldSerializeBorderColorDisabled() As Boolean
  975.         Return m_BorderColorDisabled <> Me.defaultBorderColorDisabled
  976.     End Function
  977.     Friend Sub ResetBorderColorDisabled()
  978.         m_BorderColorDisabled = Me.defaultBorderColorDisabled
  979.     End Sub
  980.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the fore color of the tab when not selected.")> _
  981.     Public Property ForeColorDisabled() As Color
  982.         Get
  983.             Return m_ForeColorDisabled
  984.         End Get
  985.         Set(ByVal Value As Color)
  986.             m_ForeColorDisabled = Value
  987.             For Each t As TabPage In TabPages
  988.                 t.ForeColorDisabled = Value
  989.             Next
  990.         End Set
  991.     End Property
  992.     Friend Function ShouldSerializeForeColorDisabled() As Boolean
  993.         Return m_ForeColorDisabled <> Me.defaultForeColorDisabled
  994.     End Function
  995.     Friend Sub ResetForeColorDisabled()
  996.         m_ForeColorDisabled = Me.defaultForeColorDisabled
  997.     End Sub
  998.     <Browsable(True), Category("Layout"), DefaultValue(100), Description("Gets or sets the minimum width for the tab.")> _
  999.     Public Property TabMinimumWidth() As Integer
  1000.         Get
  1001.             Return m_tabMinimumWidth
  1002.         End Get
  1003.         Set(ByVal value As Integer)
  1004.             m_tabMinimumWidth = value
  1005.             For Each t As TabPage In TabPages
  1006.                 t.MinimumWidth = value
  1007.             Next
  1008.         End Set
  1009.     End Property
  1010.     <Browsable(True), Category("Layout"), DefaultValue(200), Description("Gets or sets the maximum width for the tab.")> _
  1011.     Public Property TabMaximumWidth() As Integer
  1012.         Get
  1013.             Return m_TabMaximumWidth
  1014.         End Get
  1015.         Set(ByVal value As Integer)
  1016.             m_TabMaximumWidth = value
  1017.             For Each t As TabPage In TabPages
  1018.                 t.MaximumWidth = value
  1019.             Next
  1020.         End Set
  1021.     End Property
  1022.     <Browsable(True), Category("Appearance"), DefaultValue(True), Description("Gets or sets whether the font on the selected tab is displayed in bold.")> _
  1023.     Public Property FontBoldOnSelect() As Boolean
  1024.         Get
  1025.             Return m_FontBoldOnSelect
  1026.         End Get
  1027.         Set(ByVal value As Boolean)
  1028.             m_FontBoldOnSelect = value
  1029.             For Each t As TabPage In TabPages
  1030.                 t.FontBoldOnSelect = value
  1031.             Next
  1032.         End Set
  1033.     End Property
  1034.     <Browsable(True), Category("Behavior"), DefaultValue(True), Description("Gets or sets a value indicating whether the control's tabs change in appearance when the mouse passes over them.")> _
  1035.     Public Property HotTrack() As Boolean
  1036.         Get
  1037.             Return m_HotTrack
  1038.         End Get
  1039.         Set(ByVal value As Boolean)
  1040.             m_HotTrack = value
  1041.             For Each t As TabPage In TabPages
  1042.                 t.HotTrack = value
  1043.             Next
  1044.         End Set
  1045.     End Property
  1046.     <Browsable(True), Category("Behavior"), DefaultValue(True), Description("Gets or sets a value indicating whether the user can reorder tabs draging.")> _
  1047.     Public Property AllowTabReorder() As Boolean
  1048.         Get
  1049.             Return m_AllowTabReorder
  1050.         End Get
  1051.         Set(ByVal value As Boolean)
  1052.             m_AllowTabReorder = value
  1053.         End Set
  1054.     End Property
  1055.     <Browsable(True), Category("Layout"), DefaultValue(False), Description("Gets or sets a value indicating whether the close button is displayed or not.")> _
  1056.     Public Property CloseButtonVisible() As Boolean
  1057.         Get
  1058.             Return CloseButton.Visible
  1059.         End Get
  1060.         Set(ByVal value As Boolean)
  1061.             If CloseButton.Visible <> value Then
  1062.                 CloseButton.Visible = value
  1063.                 SetControlsSizeLocation()
  1064.             End If
  1065.         End Set
  1066.     End Property
  1067.     <Browsable(True), Category("Layout"), DefaultValue(True), Description("Gets or sets a value indicating whether the drop button is displayed or not.")> _
  1068.     Public Property DropButtonVisible() As Boolean
  1069.         Get
  1070.             Return DropButton.Visible
  1071.         End Get
  1072.         Set(ByVal value As Boolean)
  1073.             If DropButton.Visible <> value Then
  1074.                 DropButton.Visible = value
  1075.                 SetControlsSizeLocation()
  1076.             End If
  1077.         End Set
  1078.     End Property
  1079.     <Browsable(True), Category("Appearance"), DefaultValue(True), Description("Gets or sets a value indicating whether a double line separator is displayed at the top of the control.")> _
  1080.     Public Property TopSeparator() As Boolean
  1081.         Get
  1082.             Return m_TopSeparator
  1083.         End Get
  1084.         Set(ByVal value As Boolean)
  1085.             m_TopSeparator = value
  1086.             AdjustHeight()
  1087.         End Set
  1088.     End Property
  1089.     <Browsable(True), Category("Behavior"), DefaultValue(TabAlignment.Top), Description("Gets or sets the area of the control (for example, along the top) where the tabs are aligned.")> _
  1090.     Public Property Alignment() As TabAlignment
  1091.         Get
  1092.             Return m_Alignment
  1093.         End Get
  1094.         Set(ByVal value As TabAlignment)
  1095.             m_Alignment = value
  1096.             AdjustHeight()
  1097.             PositionButtons()
  1098.             For Each t As TabPage In TabPages
  1099.                 t.Alignment = value
  1100.             Next
  1101.         End Set
  1102.     End Property
  1103.     <Browsable(True), Category("Layout"), Description("Gets or sets the amount of space around the form on the control's tab pages.")> _
  1104.     Public Shadows Property Padding() As Padding
  1105.         Get
  1106.             Return pnlBottom.Padding
  1107.         End Get
  1108.         Set(ByVal value As Padding)
  1109.             pnlBottom.Padding = value
  1110.         End Set
  1111.     End Property
  1112.     Friend Function ShouldSerializePadding() As Boolean
  1113.         Return pnlBottom.Padding <> defaultPadding
  1114.     End Function
  1115.     Friend Sub ResetPadding()
  1116.         pnlBottom.Padding = defaultPadding
  1117.     End Sub
  1118.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for the control button.")> _
  1119.     Public Property ControlButtonBackHighColor() As System.Drawing.Color
  1120.         Get
  1121.             Return DropButton.BackHighColor
  1122.         End Get
  1123.         Set(ByVal Value As Color)
  1124.             DropButton.BackHighColor = Value
  1125.             CloseButton.BackHighColor = Value
  1126.         End Set
  1127.     End Property
  1128.     Friend Function ShouldSerializeControlButtonBackHighColor() As Boolean
  1129.         Return DropButton.BackHighColor <> Me.defaultControlButtonBackHighColor
  1130.     End Function
  1131.     Friend Sub ResetControlButtonBackHighColor()
  1132.         DropButton.BackHighColor = Me.defaultControlButtonBackHighColor
  1133.         CloseButton.BackHighColor = Me.defaultControlButtonBackHighColor
  1134.     End Sub
  1135.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for the control button.")> _
  1136.     Public Property ControlButtonBackLowColor() As Color
  1137.         Get
  1138.             Return DropButton.BackLowColor
  1139.         End Get
  1140.         Set(ByVal Value As Color)
  1141.             DropButton.BackLowColor = Value
  1142.             CloseButton.BackLowColor = Value
  1143.         End Set
  1144.     End Property
  1145.     Friend Function ShouldSerializeControlButtonBackLowColor() As Boolean
  1146.         Return DropButton.BackLowColor <> Me.defaultControlButtonBackLowColor
  1147.     End Function
  1148.     Friend Sub ResetControlButtonBackLowColor()
  1149.         DropButton.BackLowColor = Me.defaultControlButtonBackLowColor
  1150.         CloseButton.BackLowColor = Me.defaultControlButtonBackLowColor
  1151.     End Sub
  1152.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color for the control button.")> _
  1153.     Public Property ControlButtonBorderColor() As Color
  1154.         Get
  1155.             Return DropButton.BorderColor
  1156.         End Get
  1157.         Set(ByVal Value As Color)
  1158.             DropButton.BorderColor = Value
  1159.             CloseButton.BorderColor = Value
  1160.         End Set
  1161.     End Property
  1162.     Friend Function ShouldSerializeControlButtonBorderColor() As Boolean
  1163.         Return DropButton.BorderColor <> Me.defaultControlButtonBorderColor
  1164.     End Function
  1165.     Friend Sub ResetControlButtonBorderColor()
  1166.         DropButton.BorderColor = Me.defaultControlButtonBorderColor
  1167.         CloseButton.BorderColor = Me.defaultControlButtonBorderColor
  1168.     End Sub
  1169.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ForeColor for the control button.")> _
  1170.     Public Property ControlButtonForeColor() As Color
  1171.         Get
  1172.             Return DropButton.ForeColor
  1173.         End Get
  1174.         Set(ByVal Value As Color)
  1175.             DropButton.ForeColor = Value
  1176.             CloseButton.ForeColor = Value
  1177.         End Set
  1178.     End Property
  1179.     Friend Function ShouldSerializeControlButtonForeColor() As Boolean
  1180.         Return DropButton.ForeColor <> Me.defaultControlButtonForeColor
  1181.     End Function
  1182.     Friend Sub ResetControlButtonForeColor()
  1183.         DropButton.ForeColor = Me.defaultControlButtonForeColor
  1184.         CloseButton.ForeColor = Me.defaultControlButtonForeColor
  1185.     End Sub
  1186.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the ending color of the Background linear gradient for the tabs region.")> _
  1187.     Public Property BackLowColor() As System.Drawing.Color
  1188.         Get
  1189.             Return m_BackLowColor
  1190.         End Get
  1191.         Set(ByVal Value As Color)
  1192.             m_BackLowColor = Value
  1193.             Invalidate()
  1194.         End Set
  1195.     End Property
  1196.     Friend Function ShouldSerializeBackLowColor() As Boolean
  1197.         Return m_BackLowColor <> Me.defaultBackLowColor
  1198.     End Function
  1199.     Friend Sub ResetBackLowColor()
  1200.         m_BackLowColor = Me.defaultBackLowColor
  1201.     End Sub
  1202.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the starting color of the Background linear gradient for the tabs region.")> _
  1203.     Public Property BackHighColor() As Color
  1204.         Get
  1205.             Return m_BackHighColor
  1206.         End Get
  1207.         Set(ByVal Value As Color)
  1208.             m_BackHighColor = Value
  1209.             Invalidate()
  1210.         End Set
  1211.     End Property
  1212.     Friend Function ShouldSerializeBackHighColor() As Boolean
  1213.         Return m_BackHighColor <> Me.defaultBackHighColor
  1214.     End Function
  1215.     Friend Sub ResetBackHighColor()
  1216.         m_BackHighColor = Me.defaultBackHighColor
  1217.     End Sub
  1218.     <Browsable(True), Category("Appearance"), Description("Gets or sets the System.Drawing.Color structure that represents the border color.")> _
  1219.     Public Property BorderColor() As Color
  1220.         Get
  1221.             Return m_BorderColor
  1222.         End Get
  1223.         Set(ByVal Value As Color)
  1224.             m_BorderColor = Value
  1225.             For Each t As TabPage In TabPages
  1226.                 t.BorderColor = Value
  1227.             Next
  1228.             pnlTabs.Invalidate()
  1229.             pnlTop.Invalidate()
  1230.         End Set
  1231.     End Property
  1232.     Friend Function ShouldSerializeBorderColor() As Boolean
  1233.         Return m_BorderColor <> Me.defaultBorderColor
  1234.     End Function
  1235.     Friend Sub ResetBorderColor()
  1236.         m_BorderColor = Me.defaultBorderColor
  1237.     End Sub
  1238.     <Browsable(False), Description("Gets the collection of tab pages in this tab control.")> _
  1239.     Public ReadOnly Property TabPages() As TabPageCollection
  1240.         Get
  1241.             Return Items
  1242.         End Get
  1243.     End Property
  1244.     <Browsable(True), Category("Appearance"), Description("The painting style applied to the control.")> _
  1245.     Public Property RenderMode() As ToolStripRenderMode
  1246.         Get
  1247.             Return m_RenderMode
  1248.         End Get
  1249.         Set(ByVal value As ToolStripRenderMode)
  1250.             m_RenderMode = value
  1251.             DropButton.RenderMode = value
  1252.             CloseButton.RenderMode = value
  1253.             WinMenu.RenderMode = value
  1254.             For Each t As TabPage In TabPages
  1255.                 t.RenderMode = value
  1256.             Next
  1257.         End Set
  1258.     End Property
  1259.     <Browsable(False)> _
  1260.        Public Property MenuRenderer() As ToolStripRenderer
  1261.         Get
  1262.             Return m_ContextMenuRenderer
  1263.         End Get
  1264.         Set(ByVal value As ToolStripRenderer)
  1265.             m_ContextMenuRenderer = value
  1266.             WinMenu.Renderer = m_ContextMenuRenderer
  1267.         End Set
  1268.     End Property
  1269.     <Browsable(True), Category("Appearance"), DefaultValue(Weight.Medium), Description("The weight of the border.")> _
  1270.     Public Property TabBorderEnhanceWeight() As Weight
  1271.         Get
  1272.             Return m_TabBorderEnhanceWeight
  1273.         End Get
  1274.         Set(ByVal value As Weight)
  1275.             m_TabBorderEnhanceWeight = value
  1276.             For Each t As TabPage In TabPages
  1277.                 t.BorderEnhanceWeight = value
  1278.             Next
  1279.         End Set
  1280.     End Property
  1281.     Friend Function ShouldSerializeRenderMode() As Boolean
  1282.         Return m_RenderMode <> Me.defaultRenderMode
  1283.     End Function
  1284.     Friend Sub ResetRenderMode()
  1285.         m_RenderMode = Me.defaultRenderMode
  1286.     End Sub
  1287.     Private Sub SetControlsSizeLocation()
  1288.         If DropButton.Visible And CloseButton.Visible Then
  1289.             pnlControls.Width = 43
  1290.         ElseIf DropButton.Visible Or CloseButton.Visible Then
  1291.             pnlControls.Width = 25
  1292.         Else
  1293.             pnlControls.Width = 3
  1294.         End If
  1295.         pnlControls.Left = Me.Width - pnlControls.Width
  1296.         CheckVisibility()
  1297.     End Sub
  1298.     Private Sub AdjustHeight()
  1299.         If Alignment = TabAlignment.Top Then
  1300.             pnlTop.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right
  1301.             pnlTop.Height = pnlTabs.Height + m_TabTop
  1302.             pnlTop.Top = IIf(m_TopSeparator, 2, 0)
  1303.             pnlTabs.Top = m_TabTop
  1304.             pnlBottom.Height = Me.Height - (pnlTop.Height + IIf(m_TopSeparator, 2, 0))
  1305.             pnlBottom.Top = Me.Height - pnlBottom.Height
  1306.         Else
  1307.             pnlTop.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
  1308.             pnlTop.Height = pnlTabs.Height + m_TabTop
  1309.             pnlTop.Top = Me.Height - pnlTop.Height
  1310.             pnlTabs.Top = 0
  1311.             pnlBottom.Height = Me.Height - (pnlTop.Height + IIf(m_TopSeparator, 2, 0))
  1312.             pnlBottom.Top = IIf(m_TopSeparator, 2, 0)
  1313.         End If
  1314.         pnlTop.Invalidate()
  1315.     End Sub
  1316.     Private Sub ArrangeItems()
  1317.         pnlTabs.SuspendLayout()
  1318.         If Items.Count = 0 Then Exit Sub
  1319.         Dim x As Integer = LeftOffset
  1320.         For i As Integer = 0 To Items.Count - 1
  1321.             Items(i).TabVisible = x + Items(i).Width < pnlControls.Left
  1322.             If Items(i).IsSelected And Not Items(i).TabVisible Then
  1323.                 SelectItem(Items(i))
  1324.                 Exit Sub
  1325.             End If
  1326.             Items(i).TabLeft = x
  1327.             x += Items(i).Width + m_TabOffset - 1
  1328.         Next
  1329.         If Not AddingPage Then
  1330.             If IsDelete Then
  1331.                 For i As Integer = Items.Count - 1 To 0 Step -1
  1332.                     ShowTab(i)
  1333.                 Next
  1334.                 IsDelete = False
  1335.             Else
  1336.                 For i As Integer = 0 To Items.Count - 1
  1337.                     ShowTab(i)
  1338.                 Next
  1339.             End If
  1340.         End If
  1341.         pnlTabs.ResumeLayout()
  1342.     End Sub
  1343.     Private Sub CheckVisibility()
  1344.         If Items Is Nothing Then Exit Sub
  1345.         Dim x As Integer = LeftOffset
  1346.         For i As Integer = 0 To Items.Count - 1
  1347.             If Items(i).TabVisible <> (x + Items(i).Width < pnlControls.Left) Then
  1348.                 If Items(i).TabVisible Then
  1349.                     Items(i).TabVisible = False
  1350.                     If Items(i).IsSelected Then
  1351.                         SelectItem(Items(i))
  1352.                         Exit Sub
  1353.                     Else
  1354.                         ShowTab(i)
  1355.                         Exit Sub
  1356.                     End If
  1357.                 Else
  1358.                     Items(i).TabVisible = True
  1359.                     Items(i).TabLeft = x
  1360.                     ShowTab(i)
  1361.                 End If
  1362.             ElseIf Not Items(i).TabVisible Then
  1363.                 Exit Sub
  1364.             End If
  1365.             x += Items(i).Width + m_TabOffset - 1
  1366.             If x > pnlControls.Left Then Exit Sub
  1367.         Next
  1368.     End Sub
  1369.     Private Sub ShowTab(ByVal i As Integer)
  1370.         Items(i).Visible = Items(i).TabVisible
  1371.         If Items(0).Width <> 1 Then Items(i).Left = Items(i).TabLeft
  1372.     End Sub
  1373.     Private Sub SelectItem(ByVal TabPage As TabPage)
  1374.         For Each T As TabPage In TabPages
  1375.             T.IsSelected = False
  1376.         Next
  1377.         If TabPage IsNot Nothing Then
  1378.             For Each t As TabPage In TabPages
  1379.                 If m_TabsDirection = FlowDirection.LeftToRight Then t.SendToBack() Else t.BringToFront()
  1380.             Next
  1381.             ' only the visible tab container has style doc.fill - when resize don't resize all tab containers
  1382.             TabPage.m_Form.Dock = DockStyle.Fill
  1383.             TabPage.m_Form.Visible = True
  1384.             TabPage.BringToFront()
  1385.             TabPage.m_Form.BringToFront()
  1386.             TabPage.m_Form.Focus()
  1387.             If pnlBottom.Controls.Count > 1 Then
  1388.                 pnlBottom.Controls(1).Visible = False
  1389.                 pnlBottom.Controls(1).Dock = DockStyle.None
  1390.             End If
  1391.             TabPage.IsSelected = True
  1392.             If Not TabPage.TabVisible And TabPages.IndexOf(TabPage) <> 0 Then
  1393.                 TabPages.IndexOf(TabPage) = 0
  1394.             End If
  1395.         ElseIf pnlTabs.Controls.Count > 0 Then
  1396.             For Each t As TabPage In Items
  1397.                 If t.m_Form.Equals(pnlBottom.Controls(0)) Then
  1398.                     t.Select()
  1399.                     Exit For
  1400.                 End If
  1401.             Next
  1402.         End If
  1403.     End Sub
  1404.     Private Sub TabControl_FontChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.FontChanged
  1405.         For Each t As TabPage In TabPages
  1406.             t.Font = Font
  1407.         Next
  1408.     End Sub
  1409.     Private Sub TabControl_ForeColorChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ForeColorChanged
  1410.         For Each t As TabPage In TabPages
  1411.             t.ForeColor = ForeColor
  1412.         Next
  1413.     End Sub
  1414.     Private Sub TabControl_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
  1415.         If m_TopSeparator Then
  1416.             ControlPaint.DrawBorder3D(e.Graphics, New Rectangle(-2, 0, Me.Width + 4, -2))
  1417.         End If
  1418.     End Sub
  1419.     Private Sub TabControl_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
  1420.         CheckVisibility()
  1421.     End Sub
  1422.     Private Sub pnlTop_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles pnlTop.SizeChanged
  1423.         PositionButtons()
  1424.     End Sub
  1425.     Private Sub PositionButtons()
  1426.         DropButton.Top = Math.Ceiling((pnlTop.Height - DropButton.Height) / 2) + IIf(Alignment = TabAlignment.Top And TopSeparator, -1, 0)
  1427.         CloseButton.Top = DropButton.Top
  1428.     End Sub
  1429.     Private Sub pnlTop_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pnlTop.Paint
  1430.         Dim Brush As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, pnlTop.Height), RenderColors.BackHighColor(m_RenderMode, BackHighColor), RenderColors.BackLowColor(m_RenderMode, BackLowColor))
  1431.         e.Graphics.FillRectangle(Brush, New Rectangle(0, 0, pnlTop.Width, pnlTop.Height))
  1432.         Dim Pen As New Pen(RenderColors.BorderColor(m_RenderMode, BorderColor))
  1433.         If Alignment = TabAlignment.Top Then
  1434.             e.Graphics.DrawLine(Pen, 0, sender.Height - 1, sender.Width + 1, sender.Height - 1)
  1435.         Else
  1436.             e.Graphics.DrawLine(Pen, 0, 0, sender.Width + 1, 0)
  1437.         End If
  1438.         Pen.Dispose()
  1439.         Brush.Dispose()
  1440.     End Sub
  1441.     Private Sub DropButton_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DropButton.MouseDown
  1442.         WinMenu.Items.Clear()
  1443.         For i As Integer = 0 To Items.Count - 1
  1444.             WinMenu.Items.Add(Items(i).MenuItem)
  1445.             AddHandler Items(i).MenuItem.Click, AddressOf MenuClick
  1446.         Next
  1447.         WinMenu.Show(pnlTop, pnlTop.Width - WinMenu.Width, pnlTop.Height - 1)
  1448.     End Sub
  1449.     Private Sub MenuClick(ByVal sender As Object, ByVal e As EventArgs)
  1450.         sender.Tag.Select()
  1451.     End Sub
  1452.     Private Sub CloseButton_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles CloseButton.MouseDown
  1453.         Items.SelectedTab.m_Form.Close()
  1454.     End Sub
  1455.     Private Sub Items_GetTabRegion(ByVal sender As Object, ByVal e As GetTabRegionEventArgs) Handles Items.GetTabRegion
  1456.         RaiseEvent GetTabRegion(sender, e)
  1457.     End Sub
  1458.     Private Sub Items_SelectedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Items.SelectedChanged
  1459.         RaiseEvent SelectedTabChanged(sender, e)
  1460.     End Sub
  1461.     Private Sub Items_TabPaintBackground(ByVal sender As Object, ByVal e As TabPaintEventArgs) Handles Items.TabPaintBackground
  1462.         RaiseEvent TabPaintBackground(sender, e)
  1463.     End Sub
  1464.     Private Sub Items_TabPaintBorder(ByVal sender As Object, ByVal e As TabPaintEventArgs) Handles Items.TabPaintBorder
  1465.         RaiseEvent TabPaintBorder(sender, e)
  1466.     End Sub
  1467.     Public Sub SetColors(ByVal ColorTable As ProfessionalColorTable)
  1468.         BackHighColor = ColorTable.ToolStripGradientEnd
  1469.         BackLowColor = ColorTable.ToolStripGradientBegin
  1470.         BorderColor = ColorTable.GripDark
  1471.         BorderColorDisabled = ColorTable.SeparatorDark
  1472.         ControlButtonBackHighColor = ColorTable.ButtonSelectedGradientBegin
  1473.         ControlButtonBackLowColor = ColorTable.ButtonSelectedGradientEnd
  1474.         ControlButtonBorderColor = ColorTable.ButtonPressedBorder
  1475.         TabBackHighColor = ColorTable.MenuItemPressedGradientBegin
  1476.         TabBackLowColor = ColorTable.MenuItemPressedGradientEnd
  1477.         TabBackHighColorDisabled = ColorTable.ToolStripDropDownBackground
  1478.         TabBackLowColorDisabled = ColorTable.ToolStripGradientMiddle
  1479.         TabCloseButtonBackHighColor = Color.Transparent
  1480.         TabCloseButtonBackHighColorDisabled = Color.Transparent
  1481.         TabCloseButtonBackHighColorHot = Color.WhiteSmoke
  1482.         TabCloseButtonBackLowColor = Color.Transparent
  1483.         TabCloseButtonBackLowColorDisabled = Color.Transparent
  1484.         TabCloseButtonBackLowColorHot = Color.LightGray
  1485.         TabCloseButtonBorderColor = Color.Transparent
  1486.         TabCloseButtonBorderColorDisabled = Color.Transparent
  1487.         TabCloseButtonBorderColorHot = Color.Gray
  1488.         TabCloseButtonForeColor = Color.Gray
  1489.         TabCloseButtonForeColorDisabled = Color.Gray
  1490.         TabCloseButtonForeColorHot = Color.Firebrick
  1491.     End Sub
  1492. #Region "Keyboard Handler"
  1493.     Private Sub TabControl_Load(ByVal sender As Object, _
  1494.         ByVal e As System.EventArgs) Handles Me.Load
  1495.         Me.ParentForm.KeyPreview = True
  1496.         AddHandler Me.ParentForm.KeyDown, AddressOf Owner_KeyDown
  1497.     End Sub
  1498.     Private m_KeyCloseEnabled As Boolean = True
  1499.     Private m_KeyTabEnabled As Boolean = True
  1500.     <Browsable(True), Category("Behavior"), DefaultValue(True), Description("Gets or sets if the CTRL+TAB/CTRL+SHIFT+TAB will select the next/previous tab.")> _
  1501.     Public Property KeyTabEnabled() As Boolean
  1502.         Get
  1503.             Return m_KeyTabEnabled
  1504.         End Get
  1505.         Set(ByVal value As Boolean)
  1506.             m_KeyTabEnabled = value
  1507.         End Set
  1508.     End Property
  1509.     <Browsable(True), Category("Behavior"), DefaultValue(True), Description("Gets or sets if the CTRL+F4 will close the selected tab.")> _
  1510.     Public Property KeyCloseEnabled() As Boolean
  1511.         Get
  1512.             Return m_KeyCloseEnabled
  1513.         End Get
  1514.         Set(ByVal value As Boolean)
  1515.             m_KeyCloseEnabled = value
  1516.         End Set
  1517.     End Property
  1518.     Public Class KeyHandledEventArgs
  1519.         Inherits HandledEventArgs
  1520.         Public Index As Integer
  1521.         Public Shift As Boolean = False
  1522.     End Class
  1523.     Public Event TabPressed(ByVal sender As Object, ByVal e As KeyHandledEventArgs)
  1524.     Public Event F4Pressed(ByVal sender As Object, ByVal e As KeyHandledEventArgs)
  1525.     Private Sub Owner_KeyDown(ByVal sender As Object, _
  1526.         ByVal e As System.Windows.Forms.KeyEventArgs)
  1527.         If TabPages.Count = 0 Then Exit Sub
  1528.         Dim ke As New KeyHandledEventArgs
  1529.         Dim Index As Integer
  1530.         If KeyTabEnabled And e.KeyCode = Keys.Tab And _
  1531.             e.Control And Not e.Alt Then
  1532.             If e.Shift Then
  1533.                 Index = TabPages.SelectedIndex - 1
  1534.                 If Index < 0 Then Index = TabPages.Count - 1
  1535.                 ke.shift = True
  1536.             Else
  1537.                 Index = TabPages.SelectedIndex + 1
  1538.                 If Index > TabPages.Count - 1 Then Index = 0
  1539.             End If
  1540.             ke.Index = Index
  1541.             ke.Handled = False
  1542.             RaiseEvent TabPressed(Me, ke)
  1543.             If Not ke.Handled Then TabPages(Index).Select()
  1544.         ElseIf KeyCloseEnabled And e.KeyCode = Keys.F4 And _
  1545.             e.Control And Not e.Shift And Not e.Alt Then
  1546.             ke.Index = TabPages.SelectedIndex
  1547.             ke.Handled = False
  1548.             RaiseEvent F4Pressed(Me, ke)
  1549.             If Not ke.Handled Then TabPages.SelectedTab.m_Form.Close()
  1550.         End If
  1551.     End Sub
  1552. #End Region
  1553. #Region " Obsolete properties "
  1554.     <EditorBrowsable(EditorBrowsableState.Never)> _
  1555.     <Browsable(False), Category("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
  1556.     Public Shadows Property BorderStyle() As BorderStyle
  1557.         Get
  1558.         End Get
  1559.         Set(ByVal value As BorderStyle)
  1560.         End Set
  1561.     End Property
  1562. #End Region
  1563. End Class
  1564. Friend Module Helper
  1565.     Friend Function CreateGlassGradientBrush(ByVal Rectangle As Rectangle, ByVal Color1 As Color, ByVal Color2 As Color) As Drawing2D.LinearGradientBrush
  1566.         Dim b As New Drawing2D.LinearGradientBrush(Rectangle, Color1, Color2, Drawing2D.LinearGradientMode.Vertical)
  1567.         Dim x As New Bitmap(1, Rectangle.Height)
  1568.         Dim g As Graphics = Graphics.FromImage(x)
  1569.         g.FillRectangle(b, New Rectangle(0, 0, 1, Rectangle.Height))
  1570.         Dim c As New Drawing2D.ColorBlend(4)
  1571.         c.Colors(0) = x.GetPixel(0, 0)
  1572.         c.Colors(1) = x.GetPixel(0, x.Height / 3)
  1573.         c.Colors(2) = x.GetPixel(0, x.Height - 1)
  1574.         c.Colors(3) = x.GetPixel(0, x.Height / 3)
  1575.         c.Positions(0) = 0
  1576.         c.Positions(1) = 0.335
  1577.         c.Positions(2) = 0.335
  1578.         c.Positions(3) = 1
  1579.         b.InterpolationColors = c
  1580.         g.Dispose()
  1581.         x.Dispose()
  1582.         Return b
  1583.     End Function
  1584.     Friend Class Colors
  1585.         Public Function BackHighColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1586.             If RenderMode = ToolStripRenderMode.System Then
  1587.                 Return Color.Transparent
  1588.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1589.                 Return ProfessionalColors.ToolStripGradientEnd
  1590.             Else
  1591.                 Return ManagedColor
  1592.             End If
  1593.         End Function
  1594.         Public Function BackLowColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1595.             If RenderMode = ToolStripRenderMode.System Then
  1596.                 Return Color.Transparent
  1597.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1598.                 Return ProfessionalColors.ToolStripGradientBegin
  1599.             Else
  1600.                 Return ManagedColor
  1601.             End If
  1602.         End Function
  1603.         Public Function BorderColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1604.             If RenderMode = ToolStripRenderMode.System Then
  1605.                 Return SystemColors.ControlDarkDark
  1606.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1607.                 Return ProfessionalColors.GripDark
  1608.             Else
  1609.                 Return ManagedColor
  1610.             End If
  1611.         End Function
  1612.         Public Function BorderColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1613.             If RenderMode = ToolStripRenderMode.System Then
  1614.                 Return SystemColors.ControlDark
  1615.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1616.                 Return ProfessionalColors.SeparatorDark
  1617.             Else
  1618.                 Return ManagedColor
  1619.             End If
  1620.         End Function
  1621.         Public Function ControlButtonBackHighColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1622.             If RenderMode = ToolStripRenderMode.System Then
  1623.                 Return SystemColors.ButtonHighlight
  1624.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1625.                 Return ProfessionalColors.ButtonSelectedGradientBegin
  1626.             Else
  1627.                 Return ManagedColor
  1628.             End If
  1629.         End Function
  1630.         Public Function ControlButtonBackLowColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1631.             If RenderMode = ToolStripRenderMode.System Then
  1632.                 Return SystemColors.ButtonHighlight
  1633.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1634.                 Return ProfessionalColors.ButtonSelectedGradientEnd
  1635.             Else
  1636.                 Return ManagedColor
  1637.             End If
  1638.         End Function
  1639.         Public Function ControlButtonBorderColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1640.             If RenderMode = ToolStripRenderMode.System Then
  1641.                 Return SystemColors.HotTrack
  1642.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1643.                 Return ProfessionalColors.ButtonPressedBorder
  1644.             Else
  1645.                 Return ManagedColor
  1646.             End If
  1647.         End Function
  1648.         Public Function TabBackHighColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1649.             If RenderMode = ToolStripRenderMode.System Then
  1650.                 Return SystemColors.Control
  1651.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1652.                 Return ProfessionalColors.MenuItemPressedGradientBegin
  1653.             Else
  1654.                 Return ManagedColor
  1655.             End If
  1656.         End Function
  1657.         Public Function TabBackLowColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1658.             If RenderMode = ToolStripRenderMode.System Then
  1659.                 Return SystemColors.Control
  1660.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1661.                 Return ProfessionalColors.MenuItemPressedGradientEnd
  1662.             Else
  1663.                 Return ManagedColor
  1664.             End If
  1665.         End Function
  1666.         Public Function TabBackHighColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1667.             If RenderMode = ToolStripRenderMode.System Then
  1668.                 Return SystemColors.Control
  1669.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1670.                 Return ProfessionalColors.ToolStripDropDownBackground
  1671.             Else
  1672.                 Return ManagedColor
  1673.             End If
  1674.         End Function
  1675.         Public Function TabBackLowColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1676.             If RenderMode = ToolStripRenderMode.System Then
  1677.                 Return SystemColors.Control
  1678.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1679.                 Return ProfessionalColors.ToolStripGradientMiddle
  1680.             Else
  1681.                 Return ManagedColor
  1682.             End If
  1683.         End Function
  1684.         Public Function TabCloseButtonBackHighColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1685.             If RenderMode = ToolStripRenderMode.System Then
  1686.                 Return Color.Transparent
  1687.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1688.                 Return Color.Transparent
  1689.             Else
  1690.                 Return ManagedColor
  1691.             End If
  1692.         End Function
  1693.         Public Function TabCloseButtonBackHighColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1694.             If RenderMode = ToolStripRenderMode.System Then
  1695.                 Return Color.Transparent
  1696.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1697.                 Return Color.Transparent
  1698.             Else
  1699.                 Return ManagedColor
  1700.             End If
  1701.         End Function
  1702.         Public Function TabCloseButtonBackHighColorHot(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1703.             If RenderMode = ToolStripRenderMode.System Then
  1704.                 Return SystemColors.ButtonHighlight
  1705.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1706.                 Return Color.WhiteSmoke
  1707.             Else
  1708.                 Return ManagedColor
  1709.             End If
  1710.         End Function
  1711.         Public Function TabCloseButtonBackLowColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1712.             If RenderMode = ToolStripRenderMode.System Then
  1713.                 Return Color.Transparent
  1714.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1715.                 Return Color.Transparent
  1716.             Else
  1717.                 Return ManagedColor
  1718.             End If
  1719.         End Function
  1720.         Public Function TabCloseButtonBackLowColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1721.             If RenderMode = ToolStripRenderMode.System Then
  1722.                 Return Color.Transparent
  1723.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1724.                 Return Color.Transparent
  1725.             Else
  1726.                 Return ManagedColor
  1727.             End If
  1728.         End Function
  1729.         Public Function TabCloseButtonBackLowColorHot(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1730.             If RenderMode = ToolStripRenderMode.System Then
  1731.                 Return SystemColors.ButtonHighlight
  1732.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1733.                 Return Color.LightGray
  1734.             Else
  1735.                 Return ManagedColor
  1736.             End If
  1737.         End Function
  1738.         Public Function TabCloseButtonBorderColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1739.             If RenderMode = ToolStripRenderMode.System Then
  1740.                 Return SystemColors.ControlDark
  1741.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1742.                 Return Color.Transparent
  1743.             Else
  1744.                 Return ManagedColor
  1745.             End If
  1746.         End Function
  1747.         Public Function TabCloseButtonBorderColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1748.             If RenderMode = ToolStripRenderMode.System Then
  1749.                 Return SystemColors.GrayText
  1750.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1751.                 Return Color.Transparent
  1752.             Else
  1753.                 Return ManagedColor
  1754.             End If
  1755.         End Function
  1756.         Public Function TabCloseButtonBorderColorHot(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1757.             If RenderMode = ToolStripRenderMode.System Then
  1758.                 Return SystemColors.HotTrack
  1759.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1760.                 Return Color.Gray
  1761.             Else
  1762.                 Return ManagedColor
  1763.             End If
  1764.         End Function
  1765.         Public Function TabCloseButtonForeColor(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1766.             If RenderMode = ToolStripRenderMode.System Then
  1767.                 Return SystemColors.ControlText
  1768.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1769.                 Return Color.Gray
  1770.             Else
  1771.                 Return ManagedColor
  1772.             End If
  1773.         End Function
  1774.         Public Function TabCloseButtonForeColorDisabled(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1775.             If RenderMode = ToolStripRenderMode.System Then
  1776.                 Return SystemColors.GrayText
  1777.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1778.                 Return Color.Gray
  1779.             Else
  1780.                 Return ManagedColor
  1781.             End If
  1782.         End Function
  1783.         Public Function TabCloseButtonForeColorHot(ByVal RenderMode As ToolStripRenderMode, ByVal ManagedColor As Color) As Color
  1784.             If RenderMode = ToolStripRenderMode.System Then
  1785.                 Return SystemColors.ControlText
  1786.             ElseIf RenderMode = ToolStripRenderMode.Professional Then
  1787.                 Return Color.Firebrick
  1788.             Else
  1789.                 Return ManagedColor
  1790.             End If
  1791.         End Function
  1792.     End Class
  1793.     Friend RenderColors As New Colors
  1794. End Module