2017-06-13 84 views
0

我有一個表格,frmEmail,它使用f.ShowDialog(其中f是frmEmail的實例)調用。從ShowDialog表單設置MdiParent

如何在關閉表單時打開frmOrder的實例但設置fOrder.MdiParent = frmMain

frmMain是我的MDI表格,frmOrder是我需要打開的表格,frmEmail是我打開的表格。

我此刻的代碼是

revoke = True 

Dim f As New frmOrder(con, False, False, , orderNum) 
f.MdiParent = ' Not sure what to put here? 
f.Show() 

Me.Close() 

我需要在存儲參考frmMain一個變量傳遞?還有另一種方法可以做到嗎?

很明顯,我不能使用f.MdiParent = Me.MdiParent,因爲正如我前面提到的,frmEmail使用f.ShowDialog所以沒有MdiParent打開。

+0

這是一個問題,有太多的解決方案。最明顯的就是將這些代碼放在正確的位置。它屬於ShowDialog()調用之後,只有在它返回DialogResult.Ok時才被執行。 –

+0

@HansPassant我不能把它放在那裏,因爲它是否應該重新打開'frmOrder'。 – Harambe

+0

當然,這正是你必須檢查ShowDialog()的返回值的原因。並關閉它正確,而不是Close(),但通過分配Me.DialogResult屬性。一個對話框應該*總是*有一個對話結果。 –

回答

0

您仍然可以在ShowDialog中打開表單並設置「所有者」屬性。

當你打開frmEmail,而不是像使用f.ShowDialog()打開它,使用f.ShowDialog(Me.MdiParent)(如果你的MDI形式是,你打開frmEmail形式的父母,否則只是調整它如相關)。

這樣,當打開frmOrder時,您將MdiParent屬性設置爲frmEmail的所有者屬性。

Dim f As New frmOrder(con, False, False, , orderNum) 
f.MdiParent = Me.Owner 
f.Show()