C # форма рисования вопрос - PullRequest
2 голосов
/ 06 апреля 2011

Какой самый простой способ сделать прозрачное наложение на элементы в моей форме?

Я хочу сделать простое черное (с непрозрачностью = 0,5) наложение длямою форму и активируйте ее, если мое приложение что-то делает (как экран) .

Спасибо.

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Вы можете создать прозрачный элемент управления, наследуя элемент управления, который вы хотите использовать

Пример прозрачной панели:

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();

        }
0 голосов
/ 06 апреля 2011

Вы пытались добавить полупрозрачный элемент управления к вашей форме, который охватывает всю область формы? Имейте контрольную док-станцию ​​для всей формы, чтобы она изменяла размеры вместе с формой. Убедитесь, что он является верхним в Z-порядке, так что все остальные элементы управления отображаются под ним.

0 голосов
/ 06 апреля 2011

Самый простой - переопределить метод 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.

...