在表单中的元素上进行透明叠加的最简单方法是什么?
我希望为我的表单制作一个简单的黑色(带有opacity = 0.5)叠加层,如果我的应用程序正在执行某些操作,则激活它(就像一个闪屏)
谢谢。
答案 0 :(得分:2)
您可以通过继承您想要使用的控件来创建透明控件
Tranparent Panel示例:
class TransparentPanel : Panel
{
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
SolidBrush brush = new SolidBrush(Color.FromArgb(100, 0, 0, 0));
e.Graphics.FillRectangle(brush,0,0,this.Width,this.Height);
}
}
并在表格laded.s:
之后使用void Form1_Load(object sender, EventArgs e)
{
TransparentPanel overlay = new TransparentPanel();
overlay.BackColor = Color.FromArgb(50, Color.Black);
overlay.Width = this.Width;
overlay.Height = this.Height;
this.Controls.Add(overlay);
overlay.BringToFront();
}
答案 1 :(得分:0)
最简单的方法是覆盖应用程序OnPaint方法,并在其中添加以下行:
if( doingSomething )
{
using( SolidBrush brush = new SolidBrush( Color.FromArgb(128, 0, 0, 0)))
{
e.Graphics.FillRectangle( brush, 0, 0, width, height );
}
}
然后,在您执行操作时在代码中的位置,将doingSomething
设置为true
,然后调用Invalidate
。工作完成后,将doingSomething
设置为false
,然后再次致电Invalidate
。
答案 2 :(得分:0)
您是否尝试在表单中添加半透明控件以覆盖整个表单区域?让控件停靠在整个表单上,以便使用表单调整大小。确保它在Z顺序中位于最顶层,以便在其下方呈现所有其他控件。