Граница GroupBox не отображается на Server 2016 при использовании цвета фона Gainsboro

Мы используем стандарт GroupBox и Flat-Стиль. Форма backgroundcolor это Gainsboro,

На моей машине для разработки Windows 7 это выглядит так:

Win7Example

Однако при запуске приложения на компьютере под управлением Windows Server 2016 оно выглядит следующим образом:

Windows Server 2016

Границы исчезли (не видно).

Похоже, что-то связано с цветом фона, но мы не уверены, как это исправить. При использовании светло-голубого цвета это происходит на сервере 2016:

othercolor

Ребята, вы понимаете, почему мы не видим белую рамку с BG-Color? Gainsboro? Это не имеет никакого смысла....

1 ответ

У меня нет сервера 2016, чтобы проверить его, но, возможно, переопределить Paint Событие borderColor решит эту проблему, вот кастом GroupBox контроль, вы можете изменить borderColor Цвет внутри конструктора.

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CustomGroupBox gb = new CustomGroupBox();
            gb.Location = new Point(5, 5);
            gb.Size = new Size(200, 100);
            this.Controls.Add(gb);
        }
    }


    public class CustomGroupBox : GroupBox
    {
        private Color borderColor;

        public Color BorderColor
        {
            get { return this.borderColor; }
            set { this.borderColor = value; }
        }

        public CustomGroupBox()
        {
            this.borderColor = Color.Red;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Size tSize = TextRenderer.MeasureText(this.Text, this.Font);

            Rectangle borderRect = e.ClipRectangle;
            borderRect.Y += tSize.Height / 2;
            borderRect.Height -= tSize.Height / 2;
            ControlPaint.DrawBorder(e.Graphics, borderRect, this.borderColor, ButtonBorderStyle.Solid);

            Rectangle textRect = e.ClipRectangle;
            textRect.X += 6;
            textRect.Width = tSize.Width;
            textRect.Height = tSize.Height;
            e.Graphics.FillRectangle(new SolidBrush(this.BackColor), textRect);
            e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), textRect);
        }
    }
}
Другие вопросы по тегам