我正在制作一个 .NET 3.5 应用程序,其表单绘制了部分透明的黑色背景。我正在重写 OnPaintBackground 来完成此操作:
protected override void OnPaintBackground( PaintEventArgs e )
{
using ( Brush brush = new SolidBrush( Color.FromArgb( 155, Color.Black ) ) )
{
e.Graphics.FillRectangle( brush, e.ClipRectangle );
}
}
它可以工作,但有时表单会在不清除屏幕的情况下自行绘制,从而使透明度比应有的更暗。我试过玩Graphics.Flush()
and Graphics.Clear()
,但它要么无济于事,要么完全消除了透明度。有什么建议么?
编辑: 这是它的样子,在左侧启动应用程序后,在表单重绘自身几次(以响应从一个控件到另一个控件的选项卡)之后:
透明度问题 http://www.quicksnapper.com/files/5085/17725729384A10347269148_m.png
编辑2: 我今天早上尝试了一些事情,并注意到当透明部分后面的桌面发生变化时,它实际上并没有被重绘。例如,如果我打开任务管理器并将其放在窗口后面,您不会看到它自行刷新。这与我在透明度级别上看到的情况是有道理的。是否有让 Windows 重绘窗口后面区域的功能?
编辑 3: 我尝试更改表单上的一些属性,但它们都导致表单绘制不透明的黑色:
this.AllowTransparency = true;
this.DoubleBuffered = true;
this.Opacity = .99;
我将尝试为透明部分创建一个单独的窗口,正如提到的过度松弛,但仍然欢迎任何其他想法。