Вопрос о рисовании формы на C #

#c# #forms #transparency #overlay #fade

#c# #формы #прозрачность #наложение #исчезновение

Вопрос:

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

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

Спасибо.

Ответ №1:

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

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

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

}
  

И используйте это после заполнения формы.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();

        }
  

Ответ №2:

Проще всего переопределить метод application 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 снова.

Комментарии:

1. В этом случае fadescreen отображается перед основными элементами управления, можно ли это сделать в обратном порядке?

Ответ №3:

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