【发布时间】:2014-04-29 13:52:56
【问题描述】:
我想将表单的背景颜色设置为透明。我知道这可以通过设置TransparencyKey 来实现,但这对我不起作用,因为我在表单上呈现了具有不同 alpha 值的图像。我试图覆盖OnPaintBackground 方法,但后来我得到了黑色背景。有没有更好的方法来设置表单背景透明度?
【问题讨论】:
标签: c# winforms background transparency transparent
我想将表单的背景颜色设置为透明。我知道这可以通过设置TransparencyKey 来实现,但这对我不起作用,因为我在表单上呈现了具有不同 alpha 值的图像。我试图覆盖OnPaintBackground 方法,但后来我得到了黑色背景。有没有更好的方法来设置表单背景透明度?
【问题讨论】:
标签: c# winforms background transparency transparent
那行不通,透明的颜色可以让背景发光。但是表单的背景本身并没有背景。在创建窗口时,您将看到在视频适配器的帧缓冲区中初始化的像素。通常是白色的,如果你使用 Opacity 或 TransparencyKey 属性,它在某些机器上会是黑色的。
要在窗户本身上打一个洞,以便您看到它后面的任何窗户,您必须使用分层窗户。视频适配器本身将帧缓冲区中的像素与窗口的像素组合在一起,存储在单独的叠加层中。您在电视上看到的与气象员站在气象图前面的效果相同,称为颜色键控。
这很简单,只需将表单的 BackColor 设置为与 TransparencyKey 属性相同的值。选择一种不会出现在窗口中其他任何地方的“不寻常”颜色,Color.Fuchsia 是一种极好的 fuchsed 颜色。
【讨论】:
不要设置 TransparencyKey。设置不透明度:
this.Opacity = 0.5d;
注意:这会使整个窗口(半)透明,包括它的边框和标题!如果你将它设置为 0.0d 它将完全不可见!
【讨论】:
您仍然需要绘制背景以使其透明(或者您会看到黑色背景)。
protected override void OnPaintBackground(PaintEventArgs e)
{
using (SolidBrush brush = new SolidBrush(this.TransparencyKey))
e.Graphics.FillRectangle(brush, ClientRectangle);
}
不要忘记设置透明度键和背景色
TransparencyKey = BackColor = Color.LavenderBlush; // to example
和用户绘画风格。
【讨论】:
HatchBrush的项目中撕下它(所以它不是完全透明的)。