Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class LogInComboBox
- Inherits ComboBox
- #Region "Declarations"
- Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
- Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
- Private _FontColour As Color = Color.FromArgb(255, 255, 255)
- Private _LineColour As Color = Color.FromArgb(23, 119, 151)
- Private _SqaureColour As Color = Color.FromArgb(47, 47, 47)
- Private _ArrowColour As Color = Color.FromArgb(30, 30, 30)
- Private _SqaureHoverColour As Color = Color.FromArgb(52, 52, 52)
- Private State As MouseState = MouseState.None
- #End Region
- #Region "Properties & Events"
- <Category("Colours")>
- Public Property LineColour As Color
- Get
- Return _LineColour
- End Get
- Set(value As Color)
- _LineColour = value
- End Set
- End Property
- <Category("Colours")>
- Public Property SqaureColour As Color
- Get
- Return _SqaureColour
- End Get
- Set(value As Color)
- _SqaureColour = value
- End Set
- End Property
- <Category("Colours")>
- Public Property ArrowColour As Color
- Get
- Return _ArrowColour
- End Get
- Set(value As Color)
- _ArrowColour = value
- End Set
- End Property
- <Category("Colours")>
- Public Property SqaureHoverColour As Color
- Get
- Return _SqaureHoverColour
- End Get
- Set(value As Color)
- _SqaureHoverColour = value
- End Set
- End Property
- 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
- <Category("Colours")>
- Public Property BorderColour As Color
- Get
- Return _BorderColour
- End Get
- Set(value As Color)
- _BorderColour = value
- End Set
- End Property
- <Category("Colours")>
- Public Property BaseColour As Color
- Get
- Return _BaseColour
- End Get
- Set(value As Color)
- _BaseColour = value
- End Set
- End Property
- <Category("Colours")>
- Public Property FontColour As Color
- Get
- Return _FontColour
- End Get
- Set(value As Color)
- _FontColour = value
- End Set
- End Property
- Protected Overrides Sub OnSelectedItemChanged(e As System.EventArgs)
- MyBase.OnSelectedItemChanged(e)
- End Sub
- Protected Overrides Sub OnTextChanged(e As System.EventArgs)
- MyBase.OnTextChanged(e)
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- Invalidate()
- OnMouseClick(e)
- End Sub
- Protected Overrides Sub OnMouseUp(e As System.Windows.Forms.MouseEventArgs)
- Invalidate()
- MyBase.OnMouseUp(e)
- End Sub
- #End Region
- #Region "Draw Control"
- Sub ReplaceItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
- e.DrawBackground()
- e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- Dim Rect As New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width + 1, e.Bounds.Height + 1)
- With e.Graphics
- If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
- .FillRectangle(New SolidBrush(_SqaureColour), Rect)
- .DrawString(MyBase.GetItemText(MyBase.Items(e.Index)), Font, New SolidBrush(_FontColour), 1, e.Bounds.Top + 2)
- Else
- .FillRectangle(New SolidBrush(_BaseColour), Rect)
- .DrawString(MyBase.GetItemText(MyBase.Items(e.Index)), Font, New SolidBrush(_FontColour), 1, e.Bounds.Top + 2)
- End If
- End With
- e.DrawFocusRectangle()
- Invalidate()
- End Sub
- Sub New()
- SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
- ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or _
- ControlStyles.SupportsTransparentBackColor, True)
- DoubleBuffered = True
- BackColor = Color.Transparent
- DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
- DropDownStyle = ComboBoxStyle.DropDownList
- Width = 163
- Font = New Font("Segoe UI", 10)
- End Sub
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- Dim g = e.Graphics
- With g
- .TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- .SmoothingMode = SmoothingMode.HighQuality
- .PixelOffsetMode = PixelOffsetMode.HighQuality
- .Clear(BackColor)
- Dim Square As New Rectangle(Width - 25, 0, Width, Height)
- .FillRectangle(New SolidBrush(_BaseColour), New Rectangle(0, 0, Width - 25, Height))
- Select Case State
- Case MouseState.None
- .FillRectangle(New SolidBrush(_SqaureColour), Square)
- Case MouseState.Over
- .FillRectangle(New SolidBrush(_SqaureHoverColour), Square)
- End Select
- .DrawLine(New Pen(_LineColour, 2), New Point(Width - 26, 1), New Point(Width - 26, Height - 1))
- If Me.Parent.Enabled = False Then
- _FontColour = Color.Gray
- Else
- _FontColour = Color.FromArgb(255, 255, 255)
- End If
- If SelectedIndex <> -1 Then
- .DrawString(Text, Font, New SolidBrush(_FontColour), New Rectangle(3, 0, Width - 20, Height), New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near})
- Else
- If Not Items Is Nothing And Items.Count > 0 Then
- SelectedIndex = 0
- .DrawString(Items(0).ToString, Font, New SolidBrush(_FontColour), New Rectangle(3, 0, Width - 20, Height), New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near})
- End If
- End If
- .DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
- Dim P() As Point = {New Point(Width - 17, 11), New Point(Width - 13, 5), New Point(Width - 9, 11)}
- .FillPolygon(New SolidBrush(_BorderColour), P)
- .DrawPolygon(New Pen(_ArrowColour), P)
- Dim P1() As Point = {New Point(Width - 17, 15), New Point(Width - 13, 21), New Point(Width - 9, 15)}
- .FillPolygon(New SolidBrush(_BorderColour), P1)
- .DrawPolygon(New Pen(_ArrowColour), P1)
- .InterpolationMode = CType(7, InterpolationMode)
- End With
- End Sub
- #End Region
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement