这听起来像是一个奇怪的问题,但我有C# Winform,我将FormBorderStyle设置为None。到目前为止一切都很好,但我想知道是否有办法在我的表单周围添加 1px 边框?我知道我可以通过创建自己的图像来做到这一点,但我想知道是否有更自然的方法。谢谢
我认为使用图像或为使用 GDI+ 轻松绘制的内容创建不必要的控件是浪费资源。
我认为最简单的解决方案是覆盖表单的OnPaint
方法并自己绘制边框:
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, this.Bounds);
}
当然,您也可以使用自己的颜色和宽度Pen
。
对窗体使用填充 1;1;1;1,并为窗体设置背景色,然后在窗体中放置一个面板。为面板设置白色或其他正常背景色。并在父控制器中设置停靠。表单的背景色将充当边框。
在表单中添加一个Panel
(并设置它的边框)怎么样?
感谢您的建议,我决定创建 4 个 1px 标签,并在每侧的边缘扔掉。那边:1.如果您使用分组框或面板,他们会在一边关注自己的业务,而不是占据整个中间。2.您可以选择更改边框颜色。
没有比这更自然或非自然的方法了。这取决于你想要什么。
如果在表单上放置背景图像,则必须考虑一个事实,即为了能够支持可调整大小的背景图像,您必须具有可调整大小的背景图像。
如果您只是使用Pen
或Brush
在背景上绘制,您还可以支持可调整大小的表单,但是如果您想做一些很酷的事情,则必须进行更多工作,而不是使用图像更容易。
您可以在窗体中嵌入一些控件,并使用它们的颜色来营造边框的感觉。像控制一样,您可以使用 Panel
,如评论中所建议的,可以使用创建薄布罗德圆的GroupBox
或其他东西。
我创建了这个方法,所以你可以很容易地设置边框位置、颜色和粗细。
private void customBackgroundPainter(PaintEventArgs e, int linethickness = 2, Color linecolor = new Color(), int offsetborder = 6)
{
Rectangle rect = new Rectangle(offsetborder, offsetborder, this.ClientSize.Width - (offsetborder * 2), this.ClientSize.Height - (offsetborder * 2));
Pen pen = new Pen(new Color());
pen.Width = linethickness;
if (linecolor != new Color())
{
pen.Color = linecolor;
}
else
{
pen.Color = Color.Black;
}
e.Graphics.DrawRectangle(pen, rect);
}
您可以在OnPaintBackground
中使用它,如下所示:
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
customBackgroundPainter(
e,
linethickness: 3,
linecolor: Color.DarkOrange,
offsetborder: 5
);
}