vb.net - 将 Mdi Parent 作为对象打开不会让在 VB.Net 中从另一个 Mdi 子窗体打开 Mdi 子窗体
问题描述
我在 MDI Parent 表单中遇到了一个奇怪的问题。
我打开表单,例如 ->登录表单(不是 MdiContainer)-> MdiParent(是 MdiContainer)。
但是我想将一个布尔值从登录表单传递给 MdiParent表单,所以我在 MdiParent 表单中声明了一个 Friend 变量,并在登录表单中调用了 MdiParent 对象,如下面的代码所示。
Dim frm As New MdiParent
'frm.NormalMode = True
frm.Show()
一切正常。MDIParent 表单按预期打开。
但我有一些 MdiParent 形式的子形式。
子表单有一个按钮,它可以打开另一个带有父 MDIParent 的子表单,如下所示。
Dim frm1 As New Child2
frm1.MdiParent = MdiParent
frm1.anyvariable = value
frm1.Show()
但是现在打不开了。就像单击按钮一样,它会通过frm1.show()
命令行进入断点,但它不会打开。
在我直接打开 MDIParent 之前MdiParent.show()
,一切正常。
使用此代码正确打开所有子窗体。
额外的东西:
另外,当我MdiParent.Show()
在 VS2017 中运行并暂停代码并使用 Object(上面的那个)取消注释 MDIParent 代码并注释MdiParent.Show()
它工作正常。同样,停止和重放代码会产生问题。
另外,我还没有在 MdiParent Form 中使用该布尔变量,所以我猜这不是问题。
我猜现在使用公共变量是一种方便的方法。
此外,在两个子表单之间声明 Friend 变量根本不是问题。
解决方案
我认为正在发生的事情是,在这一行:
frm1.MdiParent = MdiParent
右边的部分被解释为MdiParent
类的默认实例,而不是MdiParent
当前表单的属性。因此,新表单的父级是您未显示的默认实例,而不是您显式创建并显示的实例。这也可以解释为什么当你使用它时它会起作用:
MdiParent.Show()
这是显示默认实例。修复很容易。您只需要限定名称以表明它实际上是您所指的当前表单的属性:
frm1.MdiParent = Me.MdiParent
或者,为您的表单使用比MdiParent
、like 等更好的名称MainForm
。这样就不会有名字冲突了。
推荐阅读
- angular - 根据配置模式测试环境变量
- r - 使用 r 基于组中的条件聚合从级别自动生成列
- sql - postgres 中的子查询
- bash - 如何使用 grep 或其他命令以正确的方式提取匹配?
- c# - 如何创建和使用异步命令抽象类?
- ruby-on-rails - React 中的可点击 JSON 与 Ruby on Rails
- javascript - Firebase Firestore 克隆文档子集合和数据
- php - 在 PHP 中连接到 SFTP(使用 CURL)空错误
- perl - 找不到 Bioperl Seqio perl 模块
- java - 如何在两个节点之间使用 HazelCast 同步方法?