के साथ WinForm नियंत्रण मेरे पास एक ऐसा फॉर्म है जिसमें कुछ नियंत्रण हैं (btnCreateReport, pnlDarkLayer)। मेरे पास एक पैनल है जो (डॉक = भरें) बनाने के लिए उपयुक्त है और यह सभी नियंत्रणों के पीछे है। जब उपयोगकर्ता क्लिक करता है 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;
}
इस कोड को छिपाने के नियंत्रण के सभी लेकिन मैं छिपाने के लिए 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;
}
लेकिन मैं नहीं देख सकते हैं मेरे रूप में प्रगतिफॉर्म।
अस्पष्टता के साथ कुछ भी करने के अलावा, * कृपया * उस प्रकार के लूप को 'DoEvents' कॉल करने का उपयोग न करें। या तो 'प्रसंस्करण रिपोर्ट' कुछ प्रकार के हुक को समाप्त होने पर कॉल करने के लिए उपयोग करने के लिए उपयोग करें, या 'प्रसंस्करण रिपोर्ट' विधि के अंत में कोड का आखिरी बिट डालें, यह सुनिश्चित करने के लिए कि 'BeginInvoke' का उपयोग करना याद रखें, यह सुनिश्चित करने के लिए कि यह इसे निष्पादित करता है यूआई धागा आपको लगभग सभी मामलों में 'Application.DoEvents' से बचना चाहिए। –
तो थ्रेड के काम को समाप्त करने के बाद मैं कुछ कैसे कर सकता हूं? – Saleh
सभी नियंत्रणों को अक्षम करने के लिए आप यह भी करने का प्रयास कर सकते हैं: foreach (नियंत्रण में नियंत्रण आइटम) {item.Enabled = false;} – Reniuz