如何绘制圆角矩形作为圆角表格的边框?

时间:2019-06-10 00:40:58

标签: c# winforms rectangles

我正在创建一个带有圆角边框的表单(如this question所示)。
因为这个人似乎也有问题,所以我似乎无法画一个圆角的边界。

这是我用来设置实际边框形状的代码:

// ... within InitializeComponent ...
this.FormBorderStyle = FormBorderStyle.None;
IntPtr handle = CreateRoundRectRgn(0, 0, Width, Height, 20, 20);
Region = System.Drawing.Region.FromHrgn(handle);
DeleteObject(handle);

this.ResizeRedraw = true;

这是覆盖OnPaint并绘制边框轮廓的代码。

protected override void OnPaint(PaintEventArgs e)
{
     // I've tried modifying the parameters here.
     GraphicsPath path = MyRoundedRectangle.Create(0, 0, Width, Height, 10, MyRoundedRectangle.RectangleCorners.All);

     Pen p = new Pen(Brushes.Black, 3f);
     e.Graphics.DrawPath(p, path);
}

MyRoundedRectangle的内容与this question中提供的代码相同,其中答案链接到this page,其中包含MyRoundedRectangle的代码。

我希望有一个完整的周围边界,但我得到的是:this

1 个答案:

答案 0 :(得分:4)

注释中描述的基本实现。
frmRoundCorners 表单提供了一些属性,这些属性允许使用自定义BackColor,自定义BorderColor和自定义内部边框颜色(用作阴影)绘制其圆形区域表格边框的内侧。

使用从baseForm派生的基类 Form 来实现Form本身,因此可以在Form设计器中设置Form的属性。

激活透明度,将窗体的原始BackColor设置为等于其 TrasparencyKey ,使其ClientArea完全透明,但可绘制。
在基类构造函数中,窗体的原始边框设置为 FormBorderStyle.None
我没有设置特定的BackColor/TransparencyKey颜色(必须在Form的设计器中设置),因为我认为这是需要尝试的东西。我建议使用中等灰色。避免使用红色组件。

可以移动表单,单击其ClientArea的任意点并将其拖动。

窗体及其自定义边框的最小/最大曲率设置为15180度。无法使用PropertyGrid将其更改为其他范围。
使用GraphicsPath.AddArc()方法绘制窗体及其边界的圆角区域,然后在Graphics和{{中将Matrix变换应用于Scale对象1}}(位置)组件。大小组件保持不变。

它是这样的:

Rounded draggable borderless Form

Transform