WinForm Control с непрозрачностью

У меня есть форма, на которой есть некоторые элементы управления (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 в моей форме.

7
задан Saleh 24 May 2011 в 07:27
поделиться