dlaksmi
dlaksmi

Reputation: 369

why custom component ComboBox display Black color when dropdownstyle set to dropdown in vb.net

I'm trying make custom component ComboBox but display Black color when dropdownstyle set to dropdown in vb.net

without using WndProc how can I solve it when dropdownstyle set to dropdown ?. Is there any trick or other solution ?

Please Guide me

Thanks

Imports System.ComponentModel
Imports System.Drawing.Drawing2D

Public Class FLATCOMBOBOX
    Inherits ComboBox
    ' Fields
    Private _disabledIndicatorColor As Color = Color.DarkGray
    Private _disabledColor As Color = Color.FromArgb(240, 240, 240)
    Private _disabledForeColor As Color = Color.FromArgb(&H6D, &H6D, &H6D)
    Private _disabledBorderColor As Color = Color.FromArgb(&HCC, &HCC, &HCC)
    Private _itemTopMargin As Integer = 1
    Private _textLeftMargin As Integer = 5
    Private _borderColor As Color = Color.Red
    Private _backColor As Color = Color.White
    Private _radius As Integer = 1
    Private _borderthickness As BorderThickness
    Private _indicatorColor As Color = Color.Red
    ' Methods
    Public Sub New()
        Me.InitializeComponent()
        MyBase.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        MyBase.SetStyle(ControlStyles.ContainerControl, True)
        MyBase.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
        MyBase.SetStyle(ControlStyles.ResizeRedraw, True)
        MyBase.SetStyle(ControlStyles.Selectable, True)
        MyBase.SetStyle(ControlStyles.UserPaint, True)
        MyBase.SetStyle(ControlStyles.Selectable, True)
        MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        Me.FlatStyle = FlatStyle.Flat
        Me.DrawMode = DrawMode.Normal
        Me.DropDownStyle = ComboBoxStyle.DropDown
        Me.Width = 260
        Me.Height = &H20
        Me.ItemHeight = &H1A
        Me.DrawMode = DrawMode.OwnerDrawFixed
        Me.IndicatorColor = Color.Red
        Me.DropdownBorderThickness = BorderThickness.Thin
    End Sub
    Private Sub DrawIndicator(ByVal graphics As Graphics, ByVal lineColor As Color, ByVal indicatorColor As Color, ByVal foreColor As Color)
        Dim num As Integer
        Dim pen As Pen
        graphics.SmoothingMode = SmoothingMode.AntiAlias
        graphics.SmoothingMode = SmoothingMode.HighQuality
        graphics.InterpolationMode = InterpolationMode.High
        Dim brush As New SolidBrush(Me._borderColor)
        Dim brush2 As New SolidBrush(Me._backColor)
        If Not Me.Enabled Then
            indicatorColor = Me._disabledIndicatorColor
            brush.Color = Me._disabledBorderColor
            brush2.Color = Me._disabledColor
        End If
        If Me.DropdownBorderThickness = BorderThickness.Thick Then
            pen = New Pen(brush, 2.0F)
            num = 1
        Else
            pen = New Pen(brush, 1.0F)
            num = 0
        End If
        Using p = New Pen(Me.BorderColor, 2)
            graphics.DrawRectangle(p, MyBase.ClientRectangle.X, MyBase.ClientRectangle.Y, MyBase.ClientRectangle.Width - 1, MyBase.ClientRectangle.Height - 1)
        End Using
        brush.Dispose()
        brush2.Dispose()
        pen.Dispose()
    End Sub
    <Category("Tools"), Description("Sets dropdown's border color.")>
    Public Overridable Property BorderColor As Color
        Get
            Return Me._borderColor
        End Get
        Set(ByVal value As Color)
            Me._borderColor = value
            Me.Refresh()
        End Set
    End Property
    <DisplayName("BackColor"), Category("Tools"), Description("Sets the dropdown's background color.")>
    Public Overridable Property BackgroundColor As Color
        Get
            Return Me._backColor
        End Get
        Set(ByVal value As Color)
            Me._backColor = value
            Me.Refresh()
        End Set
    End Property
    <Category("Tools"), Description("Sets the dropdown's border thickness.")>
    Public Overridable Property DropdownBorderThickness As BorderThickness
        Get
            Return Me._borderthickness
        End Get
        Set(ByVal value As BorderThickness)
            Me._borderthickness = value
            Me.Refresh()
        End Set
    End Property
    <Category("Tools"), Description("Sets the indicator color.")>
    Public Overridable Property IndicatorColor As Color
        Get
            Return Me._indicatorColor
        End Get
        Set(ByVal value As Color)
            Me._indicatorColor = value
            Me.Refresh()
        End Set
    End Property
    <Browsable(False)>
    Public Overridable Property Color As Color
        Get
            Return Me._borderColor
        End Get
        Set(ByVal value As Color)
            Me._borderColor = value
            Me.Refresh()
        End Set
    End Property

    Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
        If Me.Enabled Then
            Me.DrawIndicator(pe.Graphics, Me.Color, Me.IndicatorColor, Me.ForeColor)
        Else
            Me.DrawIndicator(pe.Graphics, Me._disabledBorderColor, Me._disabledBorderColor, Me._disabledForeColor)
        End If
        MyBase.OnPaint(pe)
    End Sub
    Public Enum BorderThickness
        Thick
        Thin
    End Enum
End Class

result from code

result from code

RESULT COMBOX DROPDOWN STYLE DROPDOWNLIST

RESULT COMBOX DROPDOWN STYLE DROPDOWNLIST

RESULT COMBOX DROPDOWNSTYLE TO DROPDOWN

RESULT COMBOX DROPDOWNSTYLE TO DROPDOWN

Upvotes: 0

Views: 101

Answers (0)

Related Questions