使用背景颜色Gainsboro时,GroupBox边框在Server 2016上不可见

时间:2017-08-25 09:13:17

标签: c# winforms groupbox windows-server-2016

我们使用标准GroupBoxFlat - 样式。表格backgroundcolor为Gainsboro

在我的Windows 7开发机器上,它看起来像这样:

Win7Example

但是,在Windows Server 2016计算机上运行应用程序时,它看起来像这样:

Windows Server 2016

边框消失(不可见)。

它似乎与背景颜色有关,但我们不确定如何修复它。使用浅蓝色时,会在Server 2016上发生这种情况:

othercolor

你们有什么线索,为什么我们看不到BG-Color Gainsboro的白色边框?它没有任何意义....

1 个答案:

答案 0 :(得分:1)

我没有服务器2016来测试它,但是可能覆盖borderColor的Paint事件会解决这个问题,这里是一个自定义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);
        }
    }
}