我有3个表格
我想将主菜单表单设置为启动表单,然后我希望在后台加载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事件是打开我的frmTcpMDI
和frmSerialMDI
,但仍然无效。
答案 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看起来更好,但有时候由于某些原因你不能总是那么简单......