WinForm的控制I有一個具有在其自身上某些控件(btnCreateReport,pnlDarkLayer).I具有適合於形成面板(基座=填充)形式,它是在所有controls.when使用者的背部點擊的btnCreateReport按鈕,我請pnlDarkLayer BringToFront方法和一些計算之後我請SendToBack()的button.I的方法希望藉助表單控件的黑色層和禁用所有的控制形式。 這可能嗎?謝謝。與不透明度
也許這個代碼幫助ü理解我的目的:
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;
}
此代碼隱藏所有的控制,但我不希望隱藏在form.I控制要對他們繪製的黑色層。用戶必須能看到控件。 我需要像控件的窗體的不透明屬性。
我有測試此:
pnlDarkLayer.CreateGraphics().CompositingMode=System.Drawing.Drawing2D.CompositingMode.SourceOver;
更新:我有測試這一項:(使用的一種形式,而不是板)
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以我的形式出現。
除了任何與不透明有關的事情,*請*不要使用調用'DoEvents'的那種循環。給ProcessingReport一些鉤子用來在完成時調用一些代碼,或者只是把最後一段代碼放在ProcessingReport方法的末尾,記得使用BeginInvoke來確保它在UI線程。幾乎所有情況下都應該避免使用'Application.DoEvents'。 – 2011-05-24 06:29:31
那麼線程完成工作後,我該怎麼做? – Saleh 2011-05-24 06:31:20
禁用所有控件,你也可以嘗試這樣做:foreach(控件中的控件){item.Enabled = false;} – Reniuz 2011-05-24 06:35:08