C#表格绘图问题
在表单中的元素上创建透明覆盖的最简单方法是什么 我希望为我的表单制作一个简单的黑色(不透明度=0.5)覆盖层,如果我的应用程序正在执行某些操作(如FadesScreen),则将其激活。C#表格绘图问题,c#,forms,transparency,overlay,fade,C#,Forms,Transparency,Overlay,Fade,在表单中的元素上创建透明覆盖的最简单方法是什么 我希望为我的表单制作一个简单的黑色(不透明度=0.5)覆盖层,如果我的应用程序正在执行某些操作(如FadesScreen),则将其激活。 谢谢。最简单的方法是重写应用程序OnPaint方法,并在其中添加以下行: if( doingSomething ) { using( SolidBrush brush = new SolidBrush( Color.FromArgb(128, 0, 0, 0))) { e.Graphics.F
谢谢。最简单的方法是重写应用程序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顺序中最上面的,以便所有其他控件都呈现在它下面。您可以通过继承要使用的控件来创建透明控件
父面板示例:
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();
}
在这种情况下,
fadescreen
在主控件之前呈现,可以按相反的顺序进行吗?