Windows 10中的Winform表单边框问题

时间:2017-04-03 11:16:05

标签: c# winforms

我是WinForms的新手,因此在Window 10 Pro环境中部署Winform Application时,需要就此问题提出专家意见。我看到将FormBorderStyle设置为SizableToolWindow(或者说就是FixedToolWindow)的对话框表单不会在窗口的所有面上绘制边框,除了顶部。

当FormBorderStyle设置为SizableToolWindow时出现边框问题
Border Issue when FormBorderStyle is set to SizableToolWindow

当FormBorderStyle设置为FixedSingle 时看到边框 Border is seen when FormBorderStyle is set to FixedSingle

示例完整代码如下:

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form form = new Form();
            form.FormBorderStyle = FormBorderStyle.FixedSingle;
            form.ShowDialog();
        }
    }

是否存在可以覆盖此行为的解决方案,可能仅适用于Windows 10?

编辑:我发现当我将Form的ControlBox属性设置为false时,只显示客户端站点并且具有完整的边框,但是Caption栏不可见。

1 个答案:

答案 0 :(得分:0)

好吧,我会说行为和渲染取决于操作系统,我认为你的问题没有真正的答案。

但是,您可以创建自定义表单/窗口,您可以将其用作工具窗口或者您想要的。

首先,您需要将FormBorderStyle设置为None

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

然后你可以覆盖OnPaint方法并在那里绘制边框,如下面的代码

protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle borderRectangle = new Rectangle(1, 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2);

            e.Graphics.DrawRectangle(Pens.Blue, borderRectangle);
            base.OnPaint(e);
        }

结果将如下图所示: enter image description here

请注意,您必须处理其他事情,例如能够移动此表单,确保添加自定义关闭按钮等。

完成此操作后,您可以将此表单用作基类,并从该表继承您未来的表单类。

该自定义表单的完整代码为:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace CustomForm
{
    public partial class CustomBorderForm : Form
    {
        public CustomBorderForm()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle borderRectangle = new Rectangle(1, 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2);

            e.Graphics.DrawRectangle(Pens.Blue, borderRectangle);
            base.OnPaint(e);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

我希望这很有帮助。