我现在有三个组件: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是什么。
答案 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不区分大小写,因此它认为我指的是类。
现在,它没有看到您的实例的原因是x
在A
内定义,因此它超出了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实例的。