У меня есть форма, на которой есть некоторые элементы управления (btnCreateReport,pnlDarkLayer).У меня есть панель, которая подходит к форме(Dock = Fill) и она находится сзади всех элементов управления.Когда пользователь нажимает на кнопку btnCreateReport, я вызываю метод pnlDarkLayer BringToFront и после некоторых вычислений я вызываю метод SendToBack() кнопки.Я хочу нарисовать темный слой на элементах управления формы и отключить все элементы управления на форме. Возможно ли это? Спасибо.
Возможно, этот код поможет вам понять мою цель:
private void btnCreateReport_Click(object sender, EventArgs e)
{
pnlDarkLayer.BackColor = Color.FromArgb(100, Color.Gray);
pnlDarkLayer.BringToFront();
btnCreateReport.Enabled = false;
Thread ProcessReport = new Thread(new ThreadStart(ProcessingReport));
ProcessReport.Start();
while (ProcessReport.IsAlive)
{
Application.DoEvents();
}
pnlDarkLayer.SendToBack();
btnCreateReport.Enabled = true;
}
Этот код скрывает все элементы управления, но я не хочу скрывать элементы управления на форме. Я хочу нарисовать темный слой на них. И пользователь должен видеть элементы управления. Мне нужно что-то вроде свойства opacity формы для ее элементов управления.
Я тестировал это:
pnlDarkLayer.CreateGraphics().CompositingMode=System.Drawing.Drawing2D.CompositingMode.SourceOver;
Update: Я протестировал этот вариант: (использую форму вместо панели)
private void btnCreateReport_Click(object sender, EventArgs e)
{
btnCreateReport.Enabled = false;
frmProgress ProgressForm = new frmProgress();
ProgressForm.TopLevel = false;
ProgressForm.Parent = this;
ProgressForm.BringToFront();
this.Controls.Add(ProgressForm);
ProgressForm.Show();
Thread ProcessReport = new Thread(new ThreadStart(ProcessingReport));
ProcessReport.Start();
while (ProcessReport.IsAlive)
{
Application.DoEvents();
}
ProgressForm.Close();
btnCreateReport.Enabled = true;
}
Но я не могу увидеть ProgressForm в моей форме.