我创建了一个简单的用户控件,可以使用
之类的东西手动创建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图像的透明部分会混乱,这是有道理的。 / p>
答案 0 :(得分:6)
Windows窗体并不真正支持透明控件
您可以通过覆盖控件的CreateParams属性并设置自定义样式(在google上查找)来解决此限制。
此外,您必须覆盖控件的绘制,以便不仅重绘您的控件而且重绘父控件。原因是必须在控件涂漆之前涂上背景。
最后,你应该像你一样覆盖OnPaintBackground方法,以确保没有绘制背景。
非常笨拙,并不完美,但它应该有用。