【发布时间】:2016-01-04 09:56:58
【问题描述】:
我正在尝试使用圆角的用户控件。它没有固定大小,但宽度通常不会超过 120 像素。
我需要用户控件及其内容(标签和表格)具有圆角边缘并看起来像一个圆框。
我用过这段代码。
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
public static System.Drawing.Region GetRoundedRegion(int controlWidth, int controlHeight)
{
return System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, controlWidth - 5, controlHeight - 5, 20, 20));
}
这会给控件带来圆角,但是在它运行了几次之后,我将多个用户控件添加到表单中,这将导致泄漏,我将在我的用户控件上获得带有红十字的白框。
有更好的方法吗?
【问题讨论】:
-
我也有这个问题。相信我,放下 WinForms 并从
WPF开始。自定义更好! -
你如何使用
CreateRoundRectRgn?类似于this?那么你当然会有一个手柄泄漏。您想修复错误(然后在您使用它的地方发布代码)还是正在寻找替代方案?另一种方法可能是带有圆角图像的transparent 控件。 -
Sinatr,你说得对,这正是我这样做的方式,重新绘制表单时调用 GetRoundedRegion,不幸的是,我无法按照链接中的建议在 OnHandleCreated() 中调用此方法由于大小是高度可变的,并且在创建句柄时,控件大小是默认大小并且它有点随机。
标签: c# .net winforms custom-controls gdi+