7

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

4

6 回答 6

10

我认为使用图像,或为使用 GDI+ 轻松绘制的东西创建不必要的控件是浪费资源。

我认为最简单的解决方案是覆盖OnPaint表单的方法并自己绘制边框:

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

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

于 2012-12-04T13:03:58.557 回答
4

在表单中使用填充 1;1;1;1 并为表单设置背景颜色,然后在表单中放置一个面板。为面板设置白色或其他正常背景颜色。并在父控制器中设置停靠。表单的背景颜色将充当边框。

于 2012-12-21T22:29:41.350 回答
1

向表单添加一个Panel(并设置它的边框)怎么样?

于 2012-12-04T12:51:01.530 回答
1

感谢您的建议,我决定创建 4 个 1px 标签并在每一侧的边缘折腾。那样: 1. 如果您使用组合框或面板,他们会在一边照顾自己的事情,而不是占据整个中间。2.您可以选择更改边框颜色。

于 2012-12-04T13:01:26.723 回答
0

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

如果您在表单上放置背景图像,则必须考虑一个事实,即为了能够支持可调整大小,您必须具有可调整大小的背景图像。

如果你只是在背景上用或绘制,你也可以支持可调整大小的形式,但如果你想做一些很酷的事情,你必须多做些工作,而不是使用图像更容易。PenBrush

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

于 2012-12-04T12:49:50.757 回答
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
    );
}
于 2016-12-16T11:15:29.370 回答