使用表单B

时间:2018-08-09 08:11:57

标签: vb.net winforms inheritance vb.net-2010

我正在使用此代码在form.load事件上禁用表单[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

使用此代码disable(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

我使用了enableAll(frmMain)enableAll(my.Forms.frmMain)enableAll(WindowsApplication1.frmMain)

但是它们都不起作用,我没有收到错误消息,并且检查了我的VB.Net 2010的Intermediate WindowfrmMain.Menustrip1.Enabled.Tostring设置为True,而当我在frmMain中对其进行检查时,已启用属性设置为false,为什么?

1 个答案:

答案 0 :(得分:0)

在FormB内,您需要使用当前显示的FormA实例(frmMain)。您使用的是frmMain的默认实例(由MS制作的非常混乱和反oop的设计选择)。

您可以通过查看Application.OpenForms集合来检索显示的frmMain实例

在调用您的 enableAll 之前,请运行此代码

Dim f = Application.OpenForms("frmMain")
If f IsNot Nothing then
    enableAll(f)
End If