c#表单绘制问题
本文关键字:问题 绘制 表单 | 更新日期: 2023-09-27 17:49:29
在我的表单元素上创建透明覆盖的最简单方法是什么?
我想为我的表单做一个简单的黑色(不透明度= 0.5)叠加,如果我的应用程序正在做一些(如fadescreen)。
谢谢。
您可以通过继承您想要使用的控件来创建透明控件
a transparent 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);
}
}
并在表单loaded .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();
}
最简单的方法是重写应用程序的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
。
您是否尝试过在窗体中添加覆盖整个窗体区域的半透明控件?将控件停靠到整个窗体,以便它随窗体调整大小。确保它在z轴顺序的最上面,这样所有其他控件都在它下面呈现。