2016-07-27 111 views
0

點擊一個按鈕後,我會顯示一個進度表並開始一個任務。我想禁用按鈕或使進度形成一個模式,所以任何東西都不應該在主窗體上點擊,直到進度完成。進度條應限制主窗口上的按鈕被點擊

我試過路過所有者引用作爲參數調用進度條窗體的ShowDialog的時候:

m_oProgressBarForm = new ProgressBarForm(); 
m_oProgressBarForm.ShowDialog(this); 

請幫助我如何阻止用戶以灰色主窗口或使按鈕不會再次點擊按鈕可點擊或將進度條窗口設置爲模態?

當前用戶可以再次單擊該按鈕,並啓動另一個實例,使應用程序無法使用,並且必須使用任務管理器手動終止應用程序。

+2

您可能需要爲上下文添加更多代碼 – Brandon

+0

您的進度表看起來像是模態。我們不清楚爲什麼你說這不是。 – LarsTech

+0

是的,但沒有達到應有的目的。你能建議如何糾正這個問題嗎? – PSDebugger

回答

0

如果使用ShowDialog()顯示錶單,則直到關閉對話框後纔會執行其後的代碼。但是,您可能需要顯示進度條表單,然後執行一些操作,然後關閉表單,您無法將進度表單顯示爲模式。

相反,你可以禁用你的主要形式和顯示設置的主要形式爲其父你的進度表,然後執行耗時的任務,最後,關閉進度表格,並啓用主要形式有:

private async void Button1_Click(object sender, EventArgs e) 
{ 
    var f = new Form(); //Your progress form 
    f.Show(this); 
    this.Enabled = false; 
    try 
    { 
     //For example a time-consuming task 
     await Task.Delay(5000); 
    } 
    catch (Exception ex) 
    { 
     //Handle probable exceltions 
    } 
    f.Close(); 
    this.Enabled = true; 
    this.BringToFront(); 
}