C#表格绘图问题

时间:2011-04-06 12:18:19

标签: c# forms transparency overlay fade

在表单中的元素上进行透明叠加的最简单方法是什么?

我希望为我的表单制作一个简单的黑色(带有opacity = 0.5)叠加层,如果我的应用程序正在执行某些操作,则激活它(就像一个闪屏)

谢谢。

3 个答案:

答案 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顺序中位于最顶层,以便在其下方呈现所有其他控件。