形式与透明背景

时间:2014-04-29 13:52:57

标签: c# winforms background transparency transparent

我想将表单的背景颜色设置为透明。我知道这可以通过设置TransparencyKey来实现,但这对我不起作用,因为我有一个在表单上呈现不同alpha值的图像。我试图覆盖OnPaintBackground方法,但后来我得到了黑色背景。有没有更好的方法来设置表单背景透明度?

3 个答案:

答案 0 :(得分:1)

不要设置TransparencyKey。设置不透明度:

this.Opacity = 0.5d;

注意:这使得整个窗口(半)透明,包括其边框和标题!如果你把它设置为0.0d就会完全看不见!

答案 1 :(得分:1)

这不起作用,透明的颜色让背景闪耀。但表单的背景本身并不具备背景。在窗口创建时,您将看到在视频适配器的帧缓冲区中初始化像素的任何内容。通常为白色,如果您使用了Opacity或TransparencyKey属性,它们会在某些机器上显示为黑色。

要在窗口中打一个洞,这样你就可以看到它后面的窗户,你必须使用一个分层窗口。视频适配器本身将帧缓冲区中的像素与窗口的像素组合在一起,存储在单独的叠加层中。您在电视上看到的同样的效果,天气预报员站在天气图前面,称为彩色键控。

这很简单,只需将表单的BackColor设置为与TransparencyKey属性相同的值即可。选择一种“不寻常”的颜色,这种颜色不会出现在窗口的任何其他位置,Color.Fuchsia是一种非常出色的颜色。

答案 2 :(得分:0)

你仍然需要绘制背景以使其透明(或者你会看到黑色背景)。

protected override void OnPaintBackground(PaintEventArgs e)
{
    using (SolidBrush brush = new SolidBrush(this.TransparencyKey))
        e.Graphics.FillRectangle(brush, ClientRectangle);
}

不要忘记设置透明度键和背景色

TransparencyKey = BackColor = Color.LavenderBlush; // to example

和用户绘画风格。