#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, чтобы все остальные элементы управления отображались под ней.