我是WinForms的新手,因此在Window 10 Pro环境中部署Winform Application时,需要就此问题提出专家意见。我看到将FormBorderStyle设置为SizableToolWindow(或者说就是FixedToolWindow)的对话框表单不会在窗口的所有面上绘制边框,除了顶部。
当FormBorderStyle设置为SizableToolWindow时出现边框问题
当FormBorderStyle设置为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栏不可见。
答案 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);
}
请注意,您必须处理其他事情,例如能够移动此表单,确保添加自定义关闭按钮等。
完成此操作后,您可以将此表单用作基类,并从该表继承您未来的表单类。
该自定义表单的完整代码为:
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();
}
}
}
我希望这很有帮助。