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