2013-07-22 36 views
1

我在C#中有兩種形式,一種是我打算用作對話框的結果,另一種是「主要」形式。如何設置另一個表單,以便form1中的代碼等待,直到第二個表單被解除,然後再繼續執行下一行代碼?C#創建自定義對話框結果表格

+3

Form.ShowDialog()方法是一個非常不爲人知的方法。 –

回答

3

您可以在form2上使用Form.ShowDialog方法。

// Some code in form1 
var form2 = new Form2(); 
form2.ShowDialog(); 
// Note: this code will resume after form2 has been closed. 

或者,您可以訂閱Form.Closed事件,當窗體2關閉運行一些代碼。

// Some code in form1 
var form2 = new Form2(); 
form2.Closed += (s, e) { 
    // Note: this code will run after form2 has been closed. 
}; 
form2.Show(); 
+0

當使用'ShowDialog'時,您應該將表單對象包裝在using語句中,因爲表單是一次性的。 – Amicable

0

的代碼可能是這樣的:

... 

var o = new Form2(); 
o.ShowDialog(); 

// resumes after closure of Form2 
... 

,你可以在這裏做的另一件事是:

var res = o.ShowDialog(); 
if (res == DialogResult.Cancel) 
{ 
    // do something because the user canceled the dialog 
} 

此外,您可以設置默認接受取消窗體上的按鈕。只要去Form的屬性,並注意到CancelButtonAcceptButton。這有兩點:

  1. 確定由這些按鈕發送DialogResult
  2. 管理輸入Esc這些按鈕的擊鍵。
0

你可以試試ShowDialog方法:

if (MyForm.ShowDialog(this) == DialogResult.OK) 
{ 
    // Resume after closure on "OK" 
} 
else 
{ 
    // Resume after closure on "Cancel/Abort/No/None/Etc..." 
}