Vb.net 使用表单B启用表单A的对象
我正在使用此代码禁用form.load事件中的form[A]Vb.net 使用表单B启用表单A的对象,vb.net,winforms,inheritance,vb.net-2010,Vb.net,Winforms,Inheritance,Vb.net 2010,我正在使用此代码禁用form.load事件中的form[A] Public Sub disableAll(ByVal root As Control) For Each root In root.Controls If Not root.Name.ToString = "cmdLogin" Then root.Enabled = False End If Next End Sub 使用此代码禁用(Me) 它按预期工作 现
Public Sub disableAll(ByVal root As Control)
For Each root In root.Controls
If Not root.Name.ToString = "cmdLogin" Then
root.Enabled = False
End If
Next
End Sub
使用此代码禁用(Me)
它按预期工作
现在的问题是启用它,我有这段代码,可以使用表单[B]中的命令按钮启用表单[A]中的对象
Public Sub enableAll(ByVal root As Control)
For Each root In root.Controls
If Not root.Name.ToString = "cmdLogin" Then
root.Enabled = True
Else
root.Hide()
End If
Next
End Sub
我使用了enablell(frmMain)
,enablell(my.Forms.frmMain)
,enablell(WindowsApplication1.frmMain)
但是它们都不起作用,我没有收到错误消息,检查我的VB.Net 2010的中间窗口,
frmMain.Menustrip1.Enabled.Tostring
设置为True,而当我在frmMain中检查时,Enabled属性设置为false,这是为什么?在FormB中,您需要使用FormA(frmMain)的实例当前显示的。您使用的是frmMain的默认实例(MS制作的一个非常混乱且反oop的设计选项)
您可以通过查看Application.OpenForms集合检索显示的frmMain实例
在调用enableAll之前,请运行此代码
Dim f = Application.OpenForms("frmMain")
If f IsNot Nothing then
enableAll(f)
End If
如果首先显示的是默认实例,那么在这种情况下使用默认实例是没有问题的。当人们创建自己的实例,然后在其他地方引用默认实例时,就会出现问题。可以在任何地方使用默认实例,也可以不使用默认实例。值得注意的是,应用程序的启动窗体是其类型的默认实例。