2017-06-13 58 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()