无边框Winform带有1像素边框

7

这可能听起来像是一个奇怪的问题,但我有一个C# Winform,我将FormBorderStyle设置为None。 到目前为止一切都很好,但我想知道是否有一种方法在我的窗体周围添加像1px的边框? 我知道我可以通过创建自己的图像来实现,但我想知道是否有更自然的方法。


3
您可以在表单上放置一个 Panel 控件并将其 Dock 属性设置为 Fill,然后给它添加边框(默认为1像素的黑色边框)。 - Adam Houldsworth
6个回答

10

我认为使用图片或者创建不必要的控件来绘制可以用 GDI+ 轻松完成的内容是浪费资源。

我认为最简单的解决方案是重写你的窗体的 OnPaint 方法并自己绘制边框:

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.DrawRectangle(Pens.Black, this.Bounds);
}

当然,您也可以使用自己的Pen,选择自己喜欢的颜色和宽度。


你的方法很完美!你知道如何在窗体调整大小时重新绘制矩形吗? - 00101010 10101010
只需将您的“Form”对象的“ResizeRedraw”属性设置为“true”。这将导致在每次调整大小时使其无效。 - Rotem
13
我发现e.Graphics.DrawRectangle有些不太准确,而使用ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.Black, ButtonBorderStyle.Solid);可以很好地起到作用,而无需重新定位。 - user692942

5

在您的表单中使用padding 1;1;1;1,设置表单背景颜色,并将面板放置到表单中。 将白色或其他普通背景颜色设置为面板。 并设置为父控制器中的dock。 表单的背景颜色将充当边框。


这是最简单的解决方案。 - Samitha Chathuranga

1

你觉得在表单中添加一个Panel(并设置其边框)怎么样?


1

感谢建议,我决定创建4个1像素标签,并将它们放在每侧的边缘。这样做的好处是: 1. 它们只占用了一侧,而不是像使用组合框或面板时占用整个中间位置。 2. 您可以选择更改边框颜色。


0

没有更自然或非自然的方式来做它,这取决于你想要什么。

如果在表单上放置一个背景图片,你必须考虑一个事实:为了能够支持可调整大小,你必须拥有可调整大小的背景图片。

如果简单地使用PenBrush 在背景上进行绘制,您也可以支持可调整大小的表单,但如果想做些有趣的东西,则需要更多的工作。相反,使用图像会更容易一些。

您可以在表单内嵌入一些控件,并用它们的颜色营造边框的感觉。像控件一样,您可以使用Panel,如评论中建议的那样,可以使用GroupBox创建细边框,或其他什么东西。


0
我创建了这个方法,让你可以轻松地设置边框位置、颜色和厚度。
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
    );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接