打开主菜单表单后打开2 MDI Parent

时间:2016-06-10 07:33:53

标签: vb.net startup mdiparent

我有3个表格

  1. TCP客户端的MDI父级
  2. MDI父级序列号
  3. 主菜单
  4. 我想将主菜单表单设置为启动表单,然后我希望在后台加载2 MDI父表单。我不想显示它们,但我想加载它们以便我可以触发那些2 mdi父级的on_load事件,即创建串行/客户端子级并自动连接。

    我试过了,但没办法。

    Private Sub frmMenu_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        frmTcpMDI.show
        frmSerialMDI.show
    End Sub
    

    我甚至尝试添加一个计时器,然后在我的启动表单的show事件中启动它,tick事件是打开我的frmTcpMDIfrmSerialMDI,但仍然无效。

1 个答案:

答案 0 :(得分:0)

好的,基本上,如果我理解你想要的东西,你需要一种方法来加载你的表格,但不能显示它们。

您希望在发生Load事件时运行一些代码。但是,作为Microsoft的stated here

  

在控件第一次可见之前发生。

这基本上搞砸了你......

因此有一些解决方法。

选项1 :您决定在Sub New()

中运行代码

如果您将要运行的所有代码放在子表单的Sub New()中,则无需致电Form.Show(),只需创建表单,代码就是运行。当您确实需要显示表单时,请调用Show()方法并完成。

选项2 :您无法在Sub New()

中运行代码

如果由于某种原因,您无法在Sub New()方法中运行您的代码,您仍然可以使用load事件来执行此操作。只需在显示后隐藏表单......看起来很傻但会起作用。

首先通知,仍然来自Microsoft:

  

创建UserControl的句柄时发生Load事件。在某些情况下,这可能导致Load事件多次发生。例如,加载UserControl时会发生Load事件,如果重新创建句柄,则会再次发生。

这意味着你必须小心只运行一次代码......

然后,来自您的父母:

Dim myNewForm = new frmTCPMdi()
myNewForm.Show()'will call the Load event
myNewForm.Hide()'will hide the form, so it is loaded but invisible...

谦虚地说,我认为选项1看起来更好,但有时候由于某些原因你不能总是那么简单......