' Firefox Theme. ' Made by AeroRev9. ' 25/07/2015. ' Updated : 27/07/2015. ' Credits : Mavaamarten, Xertz. Imports System.ComponentModel Imports System.Drawing.Drawing2D Imports System.Drawing.Text Module Theme Public ReadOnly Property GlobalFont(B As FontStyle, S As Integer) As Font Get Return New Font("Segoe UI", S, B) End Get End Property Public Function GetCheckMark() As String Return "iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEySURBVDhPY/hPRUBdw/79+/efVHz77bf/X37+wRAn2bDff/7+91l+83/YmtsYBpJs2ITjz/8rTbrwP2Dlrf9XXn5FkSPJsD13P/y3nHsVbNjyy28w5Ik27NWXX//TNt8DG1S19zFWNRiGvfzy8//ccy9RxEB4wvFnYIMMZl7+//brLwx5EEYx7MP33/9dF18Ha1py8RVcHBR7mlMvgsVXX8X0Hgwz/P379z8yLtz5AKxJdcpFcBj9+v3nf/CqW2Cx5E13UdSiYwzDvv36/d9/BUSzzvRL/0t2PQSzQd57+vEHilp0jGEYCJ9+8hnuGhiee+4Vhjp0jNUwEN566/1/m/mQZJC/48H/zz9+YVWHjHEaBsKgwAZ59eH771jl0TFew0D48osvWMWxYYKGEY///gcAqiuA6kEmfEMAAAAASUVORK5CYII=" End Function End Module Module Helpers Public Enum MouseState As Byte None = 0 Over = 1 Down = 2 End Enum Public Function FullRectangle(S As Size, Subtract As Boolean) As Rectangle If Subtract Then Return New Rectangle(0, 0, S.Width - 1, S.Height - 1) Else Return New Rectangle(0, 0, S.Width, S.Height) End If End Function Public Function GreyColor(G As UInteger) As Color Return Color.FromArgb(G, G, G) End Function Public Sub CenterString(G As Graphics, T As String, F As Font, C As Color, R As Rectangle) Dim TS As SizeF = G.MeasureString(T, F) Using B As New SolidBrush(C) G.DrawString(T, F, B, New Point(R.Width / 2 - (TS.Width / 2), R.Height / 2 - (TS.Height / 2))) End Using End Sub Public Sub FillRoundRect(G As Graphics, R As Rectangle, Curve As Integer, C As Color) Using B As New SolidBrush(C) G.FillPie(B, R.X, R.Y, Curve, Curve, 180, 90) G.FillPie(B, R.X + R.Width - Curve, R.Y, Curve, Curve, 270, 90) G.FillPie(B, R.X, R.Y + R.Height - Curve, Curve, Curve, 90, 90) G.FillPie(B, R.X + R.Width - Curve, R.Y + R.Height - Curve, Curve, Curve, 0, 90) G.FillRectangle(B, CInt(R.X + Curve / 2), R.Y, R.Width - Curve, CInt(Curve / 2)) G.FillRectangle(B, R.X, CInt(R.Y + Curve / 2), R.Width, R.Height - Curve) G.FillRectangle(B, CInt(R.X + Curve / 2), CInt(R.Y + R.Height - Curve / 2), R.Width - Curve, CInt(Curve / 2)) End Using End Sub Public Sub DrawRoundRect(G As Graphics, R As Rectangle, Curve As Integer, C As Color) Using P As New Pen(C) G.DrawArc(P, R.X, R.Y, Curve, Curve, 180, 90) G.DrawLine(P, CInt(R.X + Curve / 2), R.Y, CInt(R.X + R.Width - Curve / 2), R.Y) G.DrawArc(P, R.X + R.Width - Curve, R.Y, Curve, Curve, 270, 90) G.DrawLine(P, R.X, CInt(R.Y + Curve / 2), R.X, CInt(R.Y + R.Height - Curve / 2)) G.DrawLine(P, CInt(R.X + R.Width), CInt(R.Y + Curve / 2), CInt(R.X + R.Width), CInt(R.Y + R.Height - Curve / 2)) G.DrawLine(P, CInt(R.X + Curve / 2), CInt(R.Y + R.Height), CInt(R.X + R.Width - Curve / 2), CInt(R.Y + R.Height)) G.DrawArc(P, R.X, R.Y + R.Height - Curve, Curve, Curve, 90, 90) G.DrawArc(P, R.X + R.Width - Curve, R.Y + R.Height - Curve, Curve, Curve, 0, 90) End Using End Sub Public Sub CenterStringTab(G As Graphics, text As String, font As Font, brush As Brush, rect As Rectangle, Optional shadow As Boolean = False, Optional yOffset As Integer = 0) Dim textSize As SizeF = G.MeasureString(text, font) Dim textX As Integer = rect.X + (rect.Width / 2) - (textSize.Width / 2) Dim textY As Integer = rect.Y + (rect.Height / 2) - (textSize.Height / 2) + yOffset If shadow Then G.DrawString(text, font, Brushes.Black, textX + 1, textY + 1) G.DrawString(text, font, brush, textX, textY + 1) End Sub End Module Class FirefoxRadioButton Inherits Control #Region " Public " Public Event CheckedChanged(sender As Object, e As EventArgs) #End Region #Region " Private " Private State As MouseState Private ETC As Color = Nothing Private G As Graphics Private _EnabledCalc As Boolean Private _Checked As Boolean Private _Bold As Boolean #End Region #Region " Properties " Public Property Checked As Boolean Get Return _Checked End Get Set(value As Boolean) _Checked = value Invalidate() End Set End Property Public Shadows Property Enabled As Boolean Get Return EnabledCalc End Get Set(value As Boolean) _EnabledCalc = value Invalidate() End Set End Property Public Property EnabledCalc As Boolean Get Return _EnabledCalc End Get Set(value As Boolean) Enabled = value Invalidate() End Set End Property Public Property Bold As Boolean Get Return _Bold End Get Set(value As Boolean) _Bold = value Invalidate() End Set End Property #End Region #Region " Control " Sub New() DoubleBuffered = True ForeColor = Color.FromArgb(66, 78, 90) Font = GlobalFont(FontStyle.Regular, 10) Size = New Size(160, 27) Enabled = True End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Parent.BackColor) If Enabled Then ETC = Color.FromArgb(66, 78, 90) Select Case State Case MouseState.Over, MouseState.Down Using P As New Pen(Color.FromArgb(34, 146, 208)) G.DrawEllipse(P, New Rectangle(2, 2, 22, 22)) End Using Case Else Using P As New Pen(GreyColor(190)) G.DrawEllipse(P, New Rectangle(2, 2, 22, 22)) End Using End Select If Checked Then Using B As New SolidBrush(Color.FromArgb(34, 146, 208)) G.FillEllipse(B, New Rectangle(7, 7, 12, 12)) End Using End If Else ETC = GreyColor(170) Using P As New Pen(GreyColor(210)) G.DrawEllipse(P, New Rectangle(2, 2, 22, 22)) End Using If Checked Then Using B As New SolidBrush(Color.FromArgb(34, 146, 208)) G.FillEllipse(B, New Rectangle(7, 7, 12, 12)) End Using End If End If Using B As New SolidBrush(ETC) If Bold Then G.DrawString(Text, GlobalFont(FontStyle.Bold, 10), B, New Point(32, 4)) Else G.DrawString(Text, GlobalFont(FontStyle.Regular, 10), B, New Point(32, 4)) End If End Using End Sub Protected Overrides Sub OnMouseDown(e As MouseEventArgs) MyBase.OnMouseDown(e) State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseUp(e As MouseEventArgs) MyBase.OnMouseUp(e) If Enabled Then If Not Checked Then For Each C As Control In Parent.Controls If TypeOf C Is FirefoxRadioButton Then DirectCast(C, FirefoxRadioButton).Checked = False End If Next End If Checked = True RaiseEvent CheckedChanged(Me, e) End If State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseEnter(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(e As EventArgs) MyBase.OnMouseLeave(e) State = MouseState.None : Invalidate() End Sub #End Region End Class Class FirefoxCheckBox Inherits Control #Region " Public " Public Event CheckedChanged(sender As Object, e As EventArgs) #End Region #Region " Private " Private State As MouseState Private ETC As Color = Nothing Private G As Graphics Private _EnabledCalc As Boolean Private _Checked As Boolean Private _Bold As Boolean #End Region #Region " Properties " Public Property Checked As Boolean Get Return _Checked End Get Set(value As Boolean) _Checked = value Invalidate() End Set End Property Public Shadows Property Enabled As Boolean Get Return EnabledCalc End Get Set(value As Boolean) _EnabledCalc = value Invalidate() End Set End Property Public Property EnabledCalc As Boolean Get Return _EnabledCalc End Get Set(value As Boolean) Enabled = value Invalidate() End Set End Property Public Property Bold As Boolean Get Return _Bold End Get Set(value As Boolean) _Bold = value Invalidate() End Set End Property #End Region #Region " Control " Sub New() DoubleBuffered = True ForeColor = Color.FromArgb(66, 78, 90) Font = GlobalFont(FontStyle.Regular, 10) Size = New Size(160, 27) Enabled = True End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Parent.BackColor) If Enabled Then ETC = Color.FromArgb(66, 78, 90) Select Case State Case MouseState.Over, MouseState.Down DrawRoundRect(G, New Rectangle(3, 3, 20, 20), 3, Color.FromArgb(44, 156, 218)) Case Else DrawRoundRect(G, New Rectangle(3, 3, 20, 20), 3, GreyColor(200)) End Select If Checked Then Using I As Image = Image.FromStream(New IO.MemoryStream(Convert.FromBase64String(GetCheckMark))) G.DrawImage(I, New Point(4, 5)) End Using End If Else ETC = GreyColor(170) DrawRoundRect(G, New Rectangle(3, 3, 20, 20), 3, GreyColor(220)) If Checked Then Using I As Image = Image.FromStream(New IO.MemoryStream(Convert.FromBase64String(GetCheckMark))) G.DrawImage(I, New Point(4, 5)) End Using End If End If Using B As New SolidBrush(ETC) If Bold Then G.DrawString(Text, GlobalFont(FontStyle.Bold, 10), B, New Point(32, 4)) Else G.DrawString(Text, GlobalFont(FontStyle.Regular, 10), B, New Point(32, 4)) End If End Using End Sub Protected Overrides Sub OnMouseDown(e As MouseEventArgs) MyBase.OnMouseDown(e) State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseUp(e As MouseEventArgs) MyBase.OnMouseUp(e) If Enabled Then Checked = Not Checked RaiseEvent CheckedChanged(Me, e) End If State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseEnter(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(e As EventArgs) MyBase.OnMouseLeave(e) State = MouseState.None : Invalidate() End Sub #End Region End Class Class FirefoxH1 Inherits Label #Region " Private " Private G As Graphics #End Region #Region " Control " Sub New() DoubleBuffered = True AutoSize = False Font = New Font("Segoe UI Semibold", 20) ForeColor = Color.FromArgb(76, 88, 100) End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) Using P As New Pen(GreyColor(200)) G.DrawLine(P, New Point(0, 50), New Point(Width, 50)) End Using End Sub #End Region End Class Class FirefoxH2 Inherits Label #Region " Control " Sub New() Font = GlobalFont(FontStyle.Bold, 10) ForeColor = Color.FromArgb(76, 88, 100) BackColor = Color.White End Sub #End Region End Class Class FirefoxButton Inherits Control #Region " Private " Private State As MouseState Private ETC As Color = Nothing Private G As Graphics Private _EnabledCalc As Boolean #End Region #Region " Properties " Public Shadows Property Enabled As Boolean Get Return EnabledCalc End Get Set(value As Boolean) _EnabledCalc = value Invalidate() End Set End Property Public Property EnabledCalc As Boolean Get Return _EnabledCalc End Get Set(value As Boolean) Enabled = value Invalidate() End Set End Property #End Region #Region " Control " Sub New() DoubleBuffered = True Enabled = True ForeColor = Color.FromArgb(56, 68, 80) Font = GlobalFont(FontStyle.Regular, 10) End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Parent.BackColor) If Enabled Then ETC = Color.FromArgb(56, 68, 80) Select Case State Case MouseState.None Using B As New SolidBrush(GreyColor(245)) G.FillRectangle(B, New Rectangle(1, 1, Width - 2, Height - 2)) End Using DrawRoundRect(G, FullRectangle(Size, True), 2, GreyColor(193)) Case MouseState.Over Using B As New SolidBrush(GreyColor(232)) G.FillRectangle(B, New Rectangle(1, 1, Width - 2, Height - 2)) End Using DrawRoundRect(G, FullRectangle(Size, True), 2, GreyColor(193)) Case Else Using B As New SolidBrush(GreyColor(212)) G.FillRectangle(B, New Rectangle(1, 1, Width - 2, Height - 2)) End Using DrawRoundRect(G, FullRectangle(Size, True), 2, GreyColor(193)) End Select Else ETC = GreyColor(170) Using B As New SolidBrush(GreyColor(245)) G.FillRectangle(B, New Rectangle(1, 1, Width - 2, Height - 2)) End Using DrawRoundRect(G, FullRectangle(Size, True), 2, GreyColor(223)) End If CenterString(G, Text, GlobalFont(FontStyle.Regular, 10), ETC, FullRectangle(Size, False)) End Sub Protected Overrides Sub OnMouseUp(e As MouseEventArgs) MyBase.OnMouseUp(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseDown(e As MouseEventArgs) MyBase.OnMouseUp(e) State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseEnter(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.None : Invalidate() End Sub #End Region End Class Class FirefoxRedirect Inherits Control #Region " Private " Private State As MouseState Private G As Graphics Private FC As Color = Nothing Private FF As Font = Nothing #End Region #Region " Control " Sub New() DoubleBuffered = True Cursor = Cursors.Hand BackColor = Color.White End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) Select Case State Case MouseState.Over FC = Color.FromArgb(23, 140, 229) FF = GlobalFont(FontStyle.Underline, 10) Case MouseState.Down FC = Color.FromArgb(255, 149, 0) FF = GlobalFont(FontStyle.Regular, 10) Case Else FC = Color.FromArgb(0, 149, 221) FF = GlobalFont(FontStyle.Regular, 10) End Select Using B As New SolidBrush(FC) G.DrawString(Text, FF, B, New Point(0, 0)) End Using End Sub Protected Overrides Sub OnMouseUp(e As MouseEventArgs) MyBase.OnMouseUp(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseDown(e As MouseEventArgs) MyBase.OnMouseUp(e) State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseEnter(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(e As EventArgs) MyBase.OnMouseEnter(e) State = MouseState.None : Invalidate() End Sub #End Region End Class Class FirefoxSubTabControl Inherits TabControl #Region " Private " Private G As Graphics Private TabRect As Rectangle #End Region #Region " Control " Sub New() DoubleBuffered = True Alignment = TabAlignment.Top End Sub Protected Overrides Sub OnCreateControl() MyBase.OnCreateControl() SetStyle(ControlStyles.UserPaint, True) ItemSize = New Size(100, 40) SizeMode = TabSizeMode.Fixed End Sub Protected Overrides Sub OnControlAdded(e As ControlEventArgs) MyBase.OnControlAdded(e) Try For i As Integer = 0 To TabPages.Count - 1 TabPages(i).BackColor = Color.White TabPages(i).ForeColor = Color.FromArgb(66, 79, 90) TabPages(i).Font = GlobalFont(FontStyle.Regular, 10) Next Catch End Try End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Parent.BackColor) For i As Integer = 0 To TabPages.Count - 1 TabRect = GetTabRect(i) If GetTabRect(i).Contains(Me.PointToClient(Cursor.Position)) And Not SelectedIndex = i Then Using B As New SolidBrush(GreyColor(240)) G.FillRectangle(B, New Rectangle(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2, GetTabRect(i).Width, GetTabRect(i).Height + 1)) End Using ElseIf SelectedIndex = i Using B As New SolidBrush(GreyColor(240)) G.FillRectangle(B, New Rectangle(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2, GetTabRect(i).Width, GetTabRect(i).Height + 1)) End Using Using P As New Pen(Color.FromArgb(255, 149, 0), 4) G.DrawLine(P, New Point(TabRect.X - 2, TabRect.Y + ItemSize.Height - 2), New Point(TabRect.X + TabRect.Width - 2, TabRect.Y + ItemSize.Height - 2)) End Using ElseIf Not SelectedIndex = i G.FillRectangle(Brushes.White, GetTabRect(i)) End If Using B As New SolidBrush(Color.FromArgb(56, 69, 80)) CenterStringTab(G, TabPages(i).Text, GlobalFont(FontStyle.Regular, 10), B, GetTabRect(i)) End Using Next Using P As New Pen(GreyColor(200)) G.DrawLine(P, New Point(0, ItemSize.Height + 2), New Point(Width, ItemSize.Height + 2)) End Using End Sub #End Region End Class Class FirefoxMainTabControl Inherits TabControl #Region " Private " Private G As Graphics Private TabRect As Rectangle Private FC As Color = Nothing #End Region #Region " Control " Sub New() DoubleBuffered = True ItemSize = New Size(43, 152) Alignment = TabAlignment.Left SizeMode = TabSizeMode.Fixed End Sub Protected Overrides Sub OnCreateControl() MyBase.OnCreateControl() SetStyle(ControlStyles.UserPaint, True) End Sub Protected Overrides Sub OnControlAdded(e As ControlEventArgs) MyBase.OnControlAdded(e) Try For i As Integer = 0 To TabPages.Count - 1 TabPages(i).BackColor = Color.White TabPages(i).ForeColor = Color.FromArgb(66, 79, 90) TabPages(i).Font = GlobalFont(FontStyle.Regular, 10) Next Catch End Try End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Color.FromArgb(66, 79, 90)) For i As Integer = 0 To TabPages.Count - 1 TabRect = GetTabRect(i) If SelectedIndex = i Then Using B As New SolidBrush(Color.FromArgb(52, 63, 72)) G.FillRectangle(B, TabRect) End Using FC = GreyColor(245) Using B As New SolidBrush(Color.FromArgb(255, 175, 54)) G.FillRectangle(B, New Rectangle(TabRect.Location.X - 3, TabRect.Location.Y + 1, 5, TabRect.Height - 2)) End Using Else FC = GreyColor(192) Using B As New SolidBrush(Color.FromArgb(66, 79, 90)) G.FillRectangle(B, TabRect) End Using End If Using B As New SolidBrush(FC) G.DrawString(TabPages(i).Text, GlobalFont(FontStyle.Regular, 10), B, New Point(TabRect.X + 50, TabRect.Y + 12)) End Using If Not IsNothing(ImageList) Then If Not TabPages(i).ImageIndex < 0 Then G.DrawImage(ImageList.Images(TabPages(i).ImageIndex), New Rectangle(TabRect.X + 19, TabRect.Y + ((TabRect.Height / 2) - 10), 18, 18)) End If End If Next End Sub #End Region End Class Class FirefoxTextbox Inherits Control #Region " Private " Private WithEvents TB As New TextBox Private G As Graphics Private State As MouseState Private IsDown As Boolean Private _watermark As String = "" Private _allowpassword As Boolean = False Private _maxChars As Integer = 32767 Private _textAlignment As HorizontalAlignment Private _multiLine As Boolean = False Private _readOnly As Boolean = False #End Region #Region " Properties " Public Shadows Property UseSystemPasswordChar() As Boolean Get Return _allowpassword End Get Set(ByVal value As Boolean) TB.UseSystemPasswordChar = UseSystemPasswordChar _allowpassword = value Invalidate() End Set End Property Public Shadows Property MaxLength() As Integer Get Return _maxChars End Get Set(ByVal value As Integer) _maxChars = value TB.MaxLength = MaxLength Invalidate() End Set End Property Public Shadows Property TextAlign() As HorizontalAlignment Get Return _textAlignment End Get Set(ByVal value As HorizontalAlignment) _textAlignment = value Invalidate() End Set End Property Public Shadows Property MultiLine() As Boolean Get Return _multiLine End Get Set(ByVal value As Boolean) _multiLine = value TB.Multiline = value OnResize(EventArgs.Empty) Invalidate() End Set End Property Public Shadows Property [ReadOnly]() As Boolean Get Return _readOnly End Get Set(ByVal value As Boolean) _readOnly = value If TB IsNot Nothing Then TB.ReadOnly = value End If End Set End Property #End Region #Region " Control " Protected Overrides Sub OnTextChanged(ByVal e As EventArgs) MyBase.OnTextChanged(e) Invalidate() End Sub Protected Overrides Sub OnBackColorChanged(ByVal e As EventArgs) MyBase.OnBackColorChanged(e) Invalidate() End Sub Protected Overrides Sub OnForeColorChanged(ByVal e As EventArgs) MyBase.OnForeColorChanged(e) TB.ForeColor = ForeColor Invalidate() End Sub Protected Overrides Sub OnFontChanged(ByVal e As EventArgs) MyBase.OnFontChanged(e) TB.Font = Font End Sub Protected Overrides Sub OnGotFocus(ByVal e As EventArgs) MyBase.OnGotFocus(e) TB.Focus() End Sub Private Sub TextChangeTb() Handles TB.TextChanged Text = TB.Text End Sub Private Sub TextChng() Handles MyBase.TextChanged TB.Text = Text End Sub Public Sub NewTextBox() With TB .Text = String.Empty .BackColor = Color.White .ForeColor = Color.FromArgb(66, 78, 90) .TextAlign = HorizontalAlignment.Left .BorderStyle = BorderStyle.None .Location = New Point(3, 3) .Font = GlobalFont(FontStyle.Regular, 10) .Size = New Size(Width - 3, Height - 3) .UseSystemPasswordChar = UseSystemPasswordChar End With End Sub Sub New() MyBase.New() NewTextBox() Controls.Add(TB) SetStyle(ControlStyles.UserPaint Or ControlStyles.SupportsTransparentBackColor, True) DoubleBuffered = True TextAlign = HorizontalAlignment.Left ForeColor = Color.FromArgb(66, 78, 90) Font = GlobalFont(FontStyle.Regular, 10) Size = New Size(130, 29) End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) G = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit MyBase.OnPaint(e) G.Clear(Parent.BackColor) If Enabled Then If State = MouseState.Down Then DrawRoundRect(G, FullRectangle(Size, True), 3, Color.FromArgb(44, 156, 218)) Else DrawRoundRect(G, FullRectangle(Size, True), 3, GreyColor(200)) End If Else DrawRoundRect(G, FullRectangle(Size, True), 3, GreyColor(230)) End If TB.TextAlign = TextAlign TB.UseSystemPasswordChar = UseSystemPasswordChar End Sub Protected Overrides Sub OnResize(e As EventArgs) MyBase.OnResize(e) If Not MultiLine Then Dim tbheight As Integer = TB.Height TB.Location = New Point(10, CType(((Height / 2) - (tbheight / 2) - 0), Integer)) TB.Size = New Size(Width - 20, tbheight) Else TB.Location = New Point(10, 10) TB.Size = New Size(Width - 20, Height - 20) End If End Sub Protected Overrides Sub OnEnter(e As EventArgs) MyBase.OnEnter(e) State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnLeave(e As EventArgs) MyBase.OnLeave(e) State = MouseState.None : Invalidate() End Sub #End Region End Class