我在Windows窗体用户控件(包括单选按钮和三个标签以及一个进度条)创建了一个简单的棍子人。
我设置新的用户控制,以透明的背颜色,这样,当我将其拖动到我的形式,它与其他颜色和附图的形式的共混物。 我没有得到我想要实现的。
下面是图片:
我在Windows窗体用户控件(包括单选按钮和三个标签以及一个进度条)创建了一个简单的棍子人。
我设置新的用户控制,以透明的背颜色,这样,当我将其拖动到我的形式,它与其他颜色和附图的形式的共混物。 我没有得到我想要实现的。
下面是图片:
用户控件已经支持这一点,它的ControlStyles.SupportsTransparentBackColor风格标志已经开启。 所有你需要做的是设置背景色属性Color.Transparent。
你必须牢记这透明度模拟接下来的事情,它是通过询问控制的家长自行绘制来产生后台完成。 那么,什么是重要的是,你得到家长正确设置。 这是一个有点棘手做的,如果家长不是容器控件。 就像一个PictureBox。 设计者可以使表单父,所以你会看到表格的背景,而不是图片框。 你需要修复的代码,编辑表单构造使它看起来类似于这样:
var pos = this.PointToScreen(userControl11.Location);
userControl11.Parent = pictureBox1;
userControl11.Location = pictureBox1.PointToClient(pos);
在控制的构造函数中设置样式,支持透明背景色
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
然后设置背景颜色透明单位
this.BackColor = Color.Transparent;
从MSDN
一个更复杂的方法(也可能是工作之一) 这里所描述 -与overrding CreateParams
和OnPaint
。
为什么所有这些事情? 用户控件类有属性地区。 设置这个给你什么都喜欢的形状,并且不需要任何其他调整。
public partial class TranspBackground : UserControl
{
public TranspBackground()
{
InitializeComponent();
}
GraphicsPath GrPath
{
get
{
GraphicsPath grPath = new GraphicsPath();
grPath.AddEllipse(this.ClientRectangle);
return grPath;
}
}
protected override void OnPaint(PaintEventArgs e)
{
// set the region property to the desired path like this
this.Region = new System.Drawing.Region(GrPath);
// other drawing goes here
e.Graphics.FillEllipse(new SolidBrush(ForeColor), ClientRectangle);
}
}
其结果是,如下图中:
没有低级代码,没有扭捏,简单干净。 然而,有一个问题,但在大多数情况下,它可以不被发现,边缘不光滑和抗锯齿也不会帮助。 但是,解决方法是相当容易的。 其实不是所有这些复杂的背景处理要容易得多..