跨类和表单共享变量

时间:2018-06-12 16:11:26

标签: vb.net

我有一个名为DataStorage的类,它存储我在程序中使用的所有公开声明的变量。我的主类从DataStorage调用一个公共数组,并用值填充它。然后,主类调用一个窗体,并使用数组中的值填充其上的文本框。但是,当我运行程序时,表单会出现空白文本框。我不明白为什么会这样。我还尝试从表单的加载函数而不是在主类中填充文本框。我调试并逐步完成了我的代码,主类用数值填充了数组。但是当调用表单时,我开始逐步执​​行代码来填充文本框,它说数组等于什么都没有。如果数组存储在主类和表单调用的单独类中,为什么在主类和表单之间将值设置为null? 这是我的代码:

Public Class Main
    Private ds As New DataStorage
    Public Sub Test()
        For i = 0 to 2
            ds.Info(i) = "Hello"
        Next
        Form1.ShowDialog()
    End Sub
End Class

Public Class DataStorage
    Public Info() As String
End Class

Public Class Form1
Private ds As New DataStorage
Private Sub Form1_Load(sender As Object, e As EventAgrs) Handles MyBase.Load
    Textbox1.Text = ds.Info(0)
    Textbox2.Text = ds.Info(1)
    Textbox3.Text = ds.Info(2)
End Sub

我刚才称它为Form1;程序从主类中的子测试开始。 我只需要一种方法来获得任何类或表单都可以访问的变量/数组,除非我告诉它,否则不要更改值或设置为null。

1 个答案:

答案 0 :(得分:0)

在尝试填充数组之前,必须先为数组提供一个大小。

Public Class TestArray

    Private ds As New DataStorage

    Private Sub TestArray_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillArray()
        TextBox1.Text = ds.Info(0)
        TextBox2.Text = ds.Info(1)
        TextBox3.Text = ds.Info(2)
    End Sub

    Public Sub FillArray()
        For i = 0 To 2
            ds.Info(i) = "Hello"
        Next
    End Sub
End Class

Public Class DataStorage
    Public Info(2) As String
End Class

如果您不想提供尺码,请使用List(Of T)

Public Class TestArray

    Private ds As New DataStorage

    Private Sub TestArray_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillList()
        TextBox1.Text = ds.Info(0)
        TextBox2.Text = ds.Info(1)
        TextBox3.Text = ds.Info(2)
    End Sub

    Public Sub FillList()
        For i = 0 To 2
            ds.Info.Add("Hello")
        Next
    End Sub
End Class

Public Class DataStorage
    Public Info As New List(Of String)
End Class