Нужно, чтобы при нажатии на button появлялась panel поверх всех компонентов. Panel должна быть чёрного цвета и полупрозрачная. Как это сделать?
Могу предложить следующий вариант. Накидываем компонентов на форму, затем закидываем Panel в нужное место. Затем создаем отдельный класс, который наследует Panel, он нам понадобится для дальнейшей работы:
[System.ComponentModel.DesignerCategory("")] // чтобы дизайнер формы работал
public class ExtendedPanel : Panel
{
private const int WS_EX_TRANSPARENT = 0x20;
public ExtendedPanel()
{
SetStyle(ControlStyles.Opaque, true);
}
private int _opacity; // прозрачность
public int Opacity
{
get { return this._opacity; }
set
{
if (value < 0 || value > 100) // процентов от 0 до 100
throw new ArgumentException("Значение должно быть от 0 до 100");
this._opacity = value;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
// Color.Black - вот он наш черный цвет панели полупрозрачный
using (var brush = new SolidBrush(Color.FromArgb(this._opacity * 255 / 100, Color.Black)))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
base.OnPaint(e);
}
}
Переходим в дизайнер формы, там где определены наши компоненты. Здесь нам нужно в двух местах изменить значение нашего panel1, а именно в методе InitializeComponent делаем так:
this.panel1 = new ExtendedPanel();
И в объявлении полей класса Form1 тоже ставим свой тип:
private ExtendedPanel panel1;
В конструктор формы прописываем следующее:
public Form1()
{
InitializeComponent();
panel1.Hide(); // скрываем нашу панель изначально
}
Добавляем на форму кнопку и вешаем на нее обработчик:
private void button1_Click(object sender, EventArgs e)
{
panel1.BringToFront(); // на первый план
panel1.Opacity = 50; // задаем прозрачность в процентах
panel1.Show(); // показываем
}
Теперь, после нажатия на кнопку будет полупрозрачная панель.
Метод Color.FromArgb (Int32, Color) Создает цвет структуры из
указанного Color, с новым определенным значением alpha. Чтобы
создать непрозрачный цвет, установите alpha до 255. Чтобы создать
полупрозрачный цвет, установите alpha любое значение от 1 до 254.
Метод Control.BringToFront помещает элемент управления в начало
z-порядка. Если элемент управления является дочерним для другого
элемента управления, дочерний элемент управления перемещается в начало
z порядка.
ControlStyles.Opaque - если присвоено значение true, элемент
управления отображается непрозрачным, а фон не закрашивается.
Ссылка на источник: Any trick to use opacity on a panel in Visual Studio Window Form?
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники