我创建了一个简单的用户控件,它是用类似的东西手动创建的
MyUserControl ctrl = new MyUserControl();
该控件被设计为具有 BackColor = Color.Transparent 并且工作正常,直到我将控件的 Parent 设置为一个窗体,此时它变为变成表格的颜色。
听起来像是透明的,但它的作用是隐藏窗体上存在的所有控件。我不能 100% 确定它是获得纯色背景的控件还是当我连接它时发生的其他事情,这会阻止其他控件显示。
基本上如果你这样做
- 创建表单
- 在上面放一个按钮
- 在按钮的点击处理程序中,您执行以下操作
例子
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();
基本上,我希望用户控件覆盖整个表单,同时在表单上显示底层控件(因此是透明背景)。我不想将它添加到表单控件集合中,因为它实际上并不属于表单,它只是显示在其他所有内容之上
我尝试做同样的事情,但没有设置父级,但是控件根本没有显示。
谢谢!
编辑:如果我重写用户控件中的 OnPaintBackground 方法并阻止绘制背景,那么它就可以工作,但是这会弄乱使用 DrawImage 在控件中绘制的 PNG 图像的透明部分,这是有道理的。
最佳答案
Windows 窗体并不真正支持透明控件。
您可以通过覆盖控件的 CreateParams 属性并设置自定义样式(在谷歌上查找)来解决此限制。
此外,您必须重写控件的绘制,以便不仅重绘您的控件,而且重绘父控件。原因是背景必须在您的控件绘制自身之前绘制。
最后,您应该重写 OnPaintBackground 方法,就像您所做的那样,以确保没有绘制背景。
相当笨拙,并不完美,但应该可以。
关于c# - 设置用户控件的父级可防止其透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373913/