c#表单绘制问题

本文关键字:问题 绘制 表单 | 更新日期: 2023-09-27 17:49:29

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

我想为我的表单做一个简单的黑色(不透明度= 0.5)叠加,如果我的应用程序正在做一些(如fadescreen)

谢谢。

c#表单绘制问题

您可以通过继承您想要使用的控件来创建透明控件

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轴顺序的最上面,这样所有其他控件都在它下面呈现。