C# 带1px边框的无边框Winform

C# 带1px边框的无边框Winform,c#,winforms,visual-studio-2010,visual-studio,user-interface,C#,Winforms,Visual Studio 2010,Visual Studio,User Interface,这听起来可能是个奇怪的问题,但我有一个C#Winform,我将FormBorderStyle设置为None。到目前为止,一切都很好,但我想知道是否有一种方法可以在我的表单周围添加1px边框?我知道我可以通过创造自己的形象来做到这一点,但我想知道是否有更自然的方式来做到这一点。 谢谢没有比这更自然或非自然的方法了。这取决于你想要什么 如果你把一个背景图像放在表单上,你必须考虑一个事实,以便能够支持可缩放的,因为你必须有可调整的背景图像。p> 如果您只需使用笔或画笔在背景上画画,您也可以支持可调整大

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

没有比这更自然或非自然的方法了。这取决于你想要什么

如果你把一个背景图像放在表单上,你必须考虑一个事实,以便能够支持可缩放的,因为你必须有可调整的背景图像。p> 如果您只需使用

画笔
在背景上画画,您也可以支持可调整大小的表单,但如果您想做一些很酷的事情,您需要做更多的工作,而使用图像则更容易


您可以在表单中嵌入一些控件,并使用它们的颜色来创建边框。像控件一样,您可以使用
面板
,如注释中所建议的,也可以使用
GroupBox
,创建薄broder around或其他东西。

只需在表单中添加一个
面板
(并设置其边框)如何?

谢谢您的建议,我已经决定创建4个1px标签,只需在每一面的边缘上折腾。这样: 1.如果你使用groupbox或panel,他们会把自己的事情放在一边,而不是占据整个中间位置。
2.您可以选择更改边框颜色。

< P>我考虑使用图像,或者创建不必要的控件来使用GDI+容易浪费的资源。

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

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

当然,您也可以使用自己的
和自己的颜色和宽度;1.1.1,并为窗体设置背景色,然后在窗体上放置一个面板。将面板设置为白色或其他正常背景色。并在父控制器中设置停靠。表单的背景色将用作边框。

我创建了此方法,因此您可以轻松设置边框位置、颜色和厚度

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
    );
}

您可以在表单上放置一个
面板
,然后停靠。填充它,然后给它一个边框(它有一个1px的黑色边框)。您的方法是完美的!!您是否知道如何在表单调整大小时重新绘制矩形?只需将
表单的
resizerDraw
属性设置为
true
。这将导致它在每次调整大小时都无效。我发现
e.Graphics.DrawRectangle
有点随意,并使用了
ControlPaint.DrawBorder(e.Graphics,ClientRectangle,Color.Black,ButtonBorderStyle.Solid)无需重新定位即可正常工作。这是最简单的解决方案。