Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#表格绘图问题_C#_Forms_Transparency_Overlay_Fade - Fatal编程技术网

C#表格绘图问题

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

在表单中的元素上创建透明覆盖的最简单方法是什么

我希望为我的表单制作一个简单的黑色(不透明度=0.5)覆盖层,如果我的应用程序正在执行某些操作(如FadesScreen),则将其激活。


谢谢。

最简单的方法是重写应用程序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
在主控件之前呈现,可以按相反的顺序进行吗?