我已经创建了一个简单的用户控件,可以手动创建
MyUserControl ctrl = new MyUserControl();
该控件设计为具有BackColor = Color.Transparent并且工作正常,直到我将控件的Parent设置为一个表单,此时它变成表单的颜色.
可能听起来像它的透明,但它的作用是隐藏表格上存在的所有控件.我不是百分之百确定它的控制能够获得稳固的背景或其他在我挂钩时发生的事情,这会阻止其他控件显示.
基本上如果你这样做
创建表单
在上面放一个按钮
在按钮的单击处理程序中,执行以下操作
例
MyUserControl ctrl = new MyUserControl(); ctrl.Parent = this; ctrl.BackColor = Color.Transparent; ctrl.Size = this.Parent.ClientRectangle.Size; ctrl.Location = this.Parent.ClientRectangle.Location; ctrl.BringToFront(); ctrl.Show();
基本上我希望usercontrol覆盖整个表单,同时在表单上显示底层控件(因此透明背景).我不想将它添加到窗体控件集合中,因为它并不真正属于窗体,它只是显示在其他所有内容上
我尝试做同样的事情,但没有设置父级,但控件根本没有显示.
谢谢!
编辑:如果我覆盖usercontrol中的OnPaintBackground方法并防止背景被绘制然后它工作,但是使用DrawImage在控件中绘制的PNG图像的透明部分混乱,这是有道理的.
Windows窗体并不真正支持透明控件.
您可以通过覆盖控件的CreateParams属性并设置自定义样式(在google上查找)来解决此限制.
此外,您必须覆盖控件的绘制,以便不仅重绘您的控件而且重绘父控件.原因是必须在控件涂漆之前涂上背景.
最后,你应该像你一样覆盖OnPaintBackground方法,以确保没有绘制背景.
相当笨拙,并不完美,但它应该工作.