将 Mdi 父窗体作为对象打开不会允许从 VB.Net 中的另一个 Mdi 子窗体打开 Mdi 子窗体



我在MDI父窗体上遇到了一个奇怪的问题。
我打开了像->登录表单(不是MdiContainer(->MdiParent(是MdiContainer(
但是我想将布尔值从登录表单传递给MdiParent表单,所以我在MdiParentForm中声明了一个Friend变量,并在登录表单中调用了MdiParont对象,如下代码所示。

Dim frm As New MdiParent
'frm.NormalMode = True
frm.Show()

一切都很好。MDI父窗体按预期打开
但是我在MdiParent表单中有一些子表单。
子表单有一个按钮,它可以打开另一个子表单,下面显示的是Parent MDI Parent

Dim frm1 As New Child2
frm1.MdiParent = MdiParent
frm1.anyvariable = value
frm1.Show()

但现在它不会打开。就像点击按钮一样,它通过frm1.show()命令行到达断点,但不会打开。

在我打开MDI之前,我不像MdiParent.show()那样直接,一切都很好
使用此代码正确打开所有子窗体。

Something Extra:
此外,当我用MdiParent.Show()运行并在VS2017中暂停代码,并用Object(上面的那个(取消注释MDIPparent代码并注释MdiParent.Show()时,它工作得很好。同样,停止和重放代码会产生问题
此外,我还没有在MdiParent Form中使用该布尔变量,所以我想这不是问题
我想,就目前而言,使用公共变量是一种方便的方式
另外,在两个子窗体之间声明Friend变量根本不是问题。

我认为发生的事情是,在这一行中:

frm1.MdiParent = MdiParent

右边的部分被解释为MdiParent类的默认实例,而不是当前表单的MdiParent属性。因此,新表单的父级是未显示的默认实例而不是显式创建并显示的实例。这也可以解释为什么当你使用时它会起作用

MdiParent.Show()

其正在显示默认实例。修复很容易。您只需要限定名称以表明它实际上是您所指的当前表单的属性:

frm1.MdiParent = Me.MdiParent

或者,为表单使用比MdiParent更好的名称,如MainForm等。这样就不会有名字冲突了。

最新更新