我正在创建一个带有圆角边框的表单(如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
的代码。
我希望有一个完整的周围边界,但我得到的是:
答案 0 :(得分:4)
注释中描述的基本实现。
frmRoundCorners
表单提供了一些属性,这些属性允许使用自定义BackColor,自定义BorderColor和自定义内部边框颜色(用作阴影)绘制其圆形区域表格边框的内侧。
使用从baseForm
派生的基类 Form
来实现Form本身,因此可以在Form设计器中设置Form的属性。
激活透明度,将窗体的原始BackColor设置为等于其 TrasparencyKey
,使其ClientArea
完全透明,但可绘制。
在基类构造函数中,窗体的原始边框设置为 FormBorderStyle.None
。
我没有设置特定的BackColor/TransparencyKey
颜色(必须在Form的设计器中设置),因为我认为这是需要尝试的东西。我建议使用中等灰色。避免使用红色组件。
可以移动表单,单击其ClientArea
的任意点并将其拖动。
窗体及其自定义边框的最小/最大曲率设置为15
和180
度。无法使用PropertyGrid将其更改为其他范围。
使用GraphicsPath.AddArc()方法绘制窗体及其边界的圆角区域,然后在Graphics
和{{中将Matrix变换应用于Scale
对象1}}(位置)组件。大小组件保持不变。
它是这样的:
Transform