2010-04-19 34 views
1

我有兩種形式。 第一種形式是mainForm,這永遠不會去任何地方。 打開第二個窗體(saveForm)時,它將顯示在頂部。 當我關閉這個表單時,我想要運行mainForm中的某段代碼。 我認爲這是實現此目的的正確方法?public DialogResult ShowDialog()help!

上saveForm當我關閉並返回到MainForm的代碼:

private void btnSaveDetails_Click(object sender, EventArgs e) 
    { 
     Delivery d = new Delivery(txtNameBox.Text, txtAddressBox.Text, txtDayBox.Text, txtTimeBox.Text, txtMealBox.Text, txtInstructionsBox.Text, txtStatusBox.Text); 
     mainForm.myDeliveries.Add(d); 
     this.Close(); 
    } 

任何想法?

+0

你能否解釋一下? – 2010-04-19 20:35:01

+0

你是什麼意思? – SLaks 2010-04-19 20:36:10

+0

我會改變這個問題,太模糊了。 – sark9012 2010-04-19 20:38:01

回答

1

對話框窗體的DialogResult屬性。顯式地在代碼中或通過將對話結果分配給表單上的按鈕。

private void btnSaveDetails_Click(object sender, EventArgs e) 
{ 
    Delivery d = new Delivery(
     txtNameBox.Text, txtAddressBox.Text, txtDayBox.Text, 
     txtTimeBox.Text, txtMealBox.Text, txtInstructionsBox.Text, 
     txtStatusBox.Text 
    ); 
    mainForm.myDeliveries.Add(d); 
    this.DialogResult = DialogResults.OK; 
} 

不需要調用Close()設置this.DialogResult會替你,如果你使用ShowDialog()稱爲對話框。

在給你打電話的形式爲做到以下幾點:

var frm = new MyForm(); 
if (frm.ShowDialog() == DialogResults.OK) { 
    // do what you want to do on success. 
} 
+0

我正在用一個按鈕關閉窗體,關閉窗體並返回到mainform,我希望它運行一段代碼。我會用一些代碼來改變我的問題。 – sark9012 2010-04-19 20:37:44

+0

@Luke:請參閱編輯。 – AxelEckenberger 2010-04-19 20:48:34

3

您可以使用返回的DialogResult在應用程序中進行一些更改。例如,如果您向用戶提供了一個詢問他們是否要刪除所有文件的對話框,並且他們通過單擊對話框上的是按鈕進行響應,您將刪除這些文件。 DialogResult

UPDATE:有關如何使用的DialogResult的ShowDialog和VCAN在這裏找到

詳細信息,如果您發佈的代碼是從你的「孩子」的形式,那麼你已經這樣做的遠可能是罰款,但是,您仍然需要提供一個DialogResult 以表格與mainForm進行通信。例如,你可以this.Close()之前做到以下幾點:

this.DialogResult = DialogResult.OK; 

然後,在代碼後調用childForm.ShowDialog(),檢查的DialogResult。如果它等於DialogResult.OK,那麼您可以執行所需的任何任務,以指示用戶單擊確定。

(而且,在一個側面說明,Dispose()方法是當您使用的ShowDialog()調用;你需要清理的東西了自己,如果需要的話)。你必須設置