这可能听起来像是一个奇怪的问题,但我有一个C# Winform,我将FormBorderStyle设置为None。 到目前为止一切都很好,但我想知道是否有一种方法在我的窗体周围添加像1px的边框? 我知道我可以通过创建自己的图像来实现,但我想知道是否有更自然的方法。
这可能听起来像是一个奇怪的问题,但我有一个C# Winform,我将FormBorderStyle设置为None。 到目前为止一切都很好,但我想知道是否有一种方法在我的窗体周围添加像1px的边框? 我知道我可以通过创建自己的图像来实现,但我想知道是否有更自然的方法。
我认为使用图片或者创建不必要的控件来绘制可以用 GDI+ 轻松完成的内容是浪费资源。
我认为最简单的解决方案是重写你的窗体的 OnPaint
方法并自己绘制边框:
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, this.Bounds);
}
当然,您也可以使用自己的Pen
,选择自己喜欢的颜色和宽度。
e.Graphics.DrawRectangle
有些不太准确,而使用ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.Black, ButtonBorderStyle.Solid);
可以很好地起到作用,而无需重新定位。 - user692942在您的表单中使用padding 1;1;1;1,设置表单背景颜色,并将面板放置到表单中。 将白色或其他普通背景颜色设置为面板。 并设置为父控制器中的dock。 表单的背景颜色将充当边框。
你觉得在表单中添加一个Panel
(并设置其边框)怎么样?
感谢建议,我决定创建4个1像素标签,并将它们放在每侧的边缘。这样做的好处是: 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
);
}
Panel
控件并将其 Dock 属性设置为 Fill,然后给它添加边框(默认为1像素的黑色边框)。 - Adam Houldsworth