3

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

+3

你可以把一个'Panel'形式和Dock.Fill它,然后给一个边界(它有一个1px的黑色边境)。 –

回答

6

我认为使用图像,或创建不必要的控件,可以很容易地使用GDI +可浪费资源来绘制。

我认为最简单的办法是压倒一切的表单的OnPaint方法和绘制边框自己:

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

当然,你也可以用自己喜欢的颜色和宽度使用自己Pen

+0

你的方法是完美的! 你会碰巧知道如何重新绘制窗体resize上的矩形? –

+0

只需将'Form'的'ResizeRedraw'属性设置为'true'即可。这会导致它在每次调整大小时都失效。 – Rotem

+9

我发现'e.Graphics.DrawRectangle'有点碰到并错过了,并且使用了'ControlPaint.DrawBorder(e。图形,ClientRectangle,Color.Black,ButtonBorderStyle.Solid);'不需要重新定位就很好。 – Lankymart

0

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

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

如果单纯上有PenBrush背景画,还可以支持可调整大小的形式,但你必须,如果你想要做一些很酷的东西更多的工作,而不是用图片更容易。

您可以在窗体中嵌入一些控件,并用颜色表示边框的感觉。像控制一样,您可以使用Panel,正如评论中所建议的那样,可以使用GroupBox来创建较薄的broder或其他内容。

1

只需在表单中添加Panel(并将其设置为边框),如何?

1

感谢您的建议,我决定创建4个1px的标签,并在每边的边上折腾。那样: 1.他们正在考虑自己的业务,而不是占用整个中间,如果你使用一个groupbox或面板。 2.您可以选择更改边框颜色。

1

在窗体中使用填充1; 1; 1; 1并为窗体设置背景颜色,并将窗格放置到窗体中。将白色或其他正常背景色设置为面板。并在父控制器中设置码头。表单的背景颜色将用作边框。

+0

这是最简单的最简单的解决方案。 –

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