protected virtual void PaintFlatControlBorder(Graphics g)
        {
            int   pw = 1;
            Color c1 = Color.Empty, c2 = Color.Empty, cb = Color.Empty, cText = Color.Empty;

            c1    = Enabled ? ThemeManager.GradientNormalColor1 : ThemeManager.BackColor;
            c2    = Enabled ? ThemeManager.GradientNormalColor2 : ThemeManager.BackColor;
            cb    = Enabled ? ThemeManager.BorderColor : ThemeManager.GradientNormalColor2;
            cText = Enabled ? ThemeManager.ForeColor : Color.FromKnownColor(KnownColor.ControlDark);

            if (Enabled && (_isHovered || Focused))
            {
                if (_isHovered && Focused)
                {
                    c1 = ThemeManager.GradientFocusHoverColor1;
                    c2 = ThemeManager.GradientFocusHoverColor2;
                    cb = ThemeManager.FocusBorderColor;
                    //pw = 2;
                }
                else if (Focused)
                {
                    c1 = ThemeManager.GradientFocusColor1;
                    c2 = ThemeManager.GradientFocusColor2;
                    cb = ThemeManager.FocusBorderColor;
                    //pw = 2;
                }
                else
                {
                    c1    = ThemeManager.GradientHoverColor1;
                    c2    = ThemeManager.GradientHoverColor2;
                    cText = ThemeManager.SelectedTextColor;
                }
            }

            if (_overrideForeColor != Color.Empty)
            {
                cText = _overrideForeColor;
            }

            Rectangle rc = ClientRectangle;

            rc.Inflate(2, 2);
            using (Brush b = new SolidBrush(ThemeManager.BackColor))
            {
                g.FillRectangle(b, rc);
            }

            rc         = ClientRectangle;
            rc.Width  -= 1;
            rc.Height -= 1;

            using (Pen p = new Pen(cb, pw))
                using (Brush b = new LinearGradientBrush(rc, c1, c2, 90))
                {
                    g.FillRectangle(b, rc);
                    g.DrawRectangle(p, rc);
                }

            rc = new Rectangle(ClientRectangle.Left + 2, ClientRectangle.Top + 2,
                               ClientRectangle.Width - 6, ClientRectangle.Height - 6);

            Rectangle rcText  = new Rectangle(rc.Left, rc.Top, rc.Width - 12, rc.Height);
            Rectangle rcArrow = new Rectangle(rcText.Right, rc.Top, 12, rc.Height);

            Image        img  = null;
            ComboBoxItem item = this.SelectedItem as ComboBoxItem;

            if (item != null)
            {
                img = item.Image;
            }

            using (Brush b = new SolidBrush(cText))
            {
                StringFormat sf = new StringFormat();
                sf.Alignment     = StringAlignment.Near;
                sf.LineAlignment = StringAlignment.Center;
                sf.Trimming      = StringTrimming.EllipsisCharacter;
                //sf.FormatFlags = StringFormatFlags.NoWrap;

                string text = SelectedItem.GetFieldValueAsText(DisplayMember);

                if (img != null)
                {
                    g.DrawImage(img, rcText.X + 2, rcText.Top, 16, 16);

                    rcText.X     += 20;
                    rcText.Width -= 20;
                }

                g.DrawString(text, this.Font, b, rcText, sf);
            }

            using (GraphicsPath gp = ImageProcessing.GenerateCenteredArrow(rcArrow))
                using (Brush b = new SolidBrush(cText))
                    using (Pen p = new Pen(b, 1))
                    {
                        g.FillPath(b, gp);
                        g.DrawPath(p, gp);
                    }
        }