为什么我的表单无法识别另一个表单上已启动的类实例?

时间:2015-10-04 21:17:34

标签: vb.net

我现在有三个组件:Form1,Form2和我的类代码所在的模块。

模块:

Public Class myClass
   public x as integer
End Class

我在Form1中启动了一个实例:

...
dim newClass as myClass = New myClass
newClass.x = 1
...

Form1上的所有内容都可以正常运行。我的问题是,当我尝试从Form2访问此实例newClass时,它不被识别。有什么方法可以解决这个问题吗?

进入Form2的测试代码是:

Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        If newClass.x = 1 then
            msgbox("success")
        end if

    End Sub

End Class

就像我说的,问题是虽然myClass被Form2识别为公共类,但它不知道newClass是什么。

2 个答案:

答案 0 :(得分:0)

以下示例显示了您的代码:

Public Sub Main()
    Dim a = New A()
    Dim b = New B()
End Sub

Public Class A

    Public x As X = New X()
End Class

Public Class B
    Public Sub Method()
        Console.WriteLine(x)
    End Sub
End Class

Public Class X

End Class

这里,在Console.WriteLine(x)行上我得到错误“BC30109'X'是类类型,不能用作表达式”。 VB.Net不区分大小写,因此它认为我指的是类。

现在,它没有看到您的实例的原因是xA内定义,因此它超出了B的范围。

要使其可见,您可以执行此操作:

Public Sub Main()
    Dim a = New A()
    Dim b = New B()
    b.x = a.x
End Sub

Public Class A

    Public x As X = New X()
End Class

Public Class B

    Public x As X = Nothing

    Public Sub Method()
        Console.WriteLine(x)
    End Sub
End Class

Public Class X

End Class

另一种选择是通过x的构造函数传递B,但我没有构造我的示例来很好地显示它。

答案 1 :(得分:0)

假设Form1创建Form2,请通过Show()方法将Form1传递给Form2:

Public Class SomeClass
    Public x As Integer
End Class

Public Class Form1

    Public SC As New SomeClass

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        SC.x = 911
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim f2 As New form2
        f2.show(Me) ' <-- pass Form1 to Form2 via "Me"
    End Sub

End Class

在Form2中,将.Owner()属性强制转换为Type1,并将其存储在本地以供使用:

Public Class Form2

    Private F1 As Form1

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.F1 = DirectCast(Me.Owner, Form1)
        Me.Text = F1.SC.x
    End Sub

End Class

注意我是如何使用F1.SC.x来访问Form1实例中的SomeClass实例的。