从form1更新form2的列表框,而无需再次创建form2

时间:2019-09-15 02:58:07

标签: vb.net

我有一个将数据从Form1传递到Form2的项目,Form1将显示在Monitor1中,而Form2将显示在Monitor2中。我达到了这个结果,但是每次我想要更新Form2中的数据时,它都会创建另一个Form2实例。是否可以在不创建新Form2的情况下更新Form2?

        Dim OBJ As New Form2
        OBJ.ListBox1.Items.AddRange(ListBox1.Items)
        OBJ.ListBox2.Items.AddRange(ListBox2.Items)
        OBJ.Label1.Text = TextBox3.Text
        OBJ.Show()
    End Sub

我搜索了Internet,但发现的只是创建一个新的Form2,而不是更新现有的Form2。

1 个答案:

答案 0 :(得分:1)

很有趣,尽管我经常告诉初学者不要使用表单的默认实例并创建自己的实例,但是在这种情况下,您可以从使用默认实例中受益。默认实例由系统管理,因此只有在需要一个新实例(即尚未创建任何实例或已废弃最后一个实例)的情况下,它才会创建一个新实例。

Form2.ListBox1.Items.AddRange(ListBox1.Items)
Form2.ListBox2.Items.AddRange(ListBox2.Items)
Form2.Label1.Text = TextBox3.Text

'Display the instance if it is new and focus it otherwise.
Form2.Show()
Form2.Activate()

通过在其中使用类名而不是该类型的变量,可以引用默认实例。了解更多here

另一种方法是自己管理一个实例,这是在默认实例之前在C#或VB.NET中需要执行的操作。

Private f2 As Form2

Private Sub UpdateForm2()
    If f2 Is Nothing OrElse f2.IsDisposed Then
        f2 = New Form2
    End If

    f2.ListBox1.Items.AddRange(ListBox1.Items)
    f2.ListBox2.Items.AddRange(ListBox2.Items)
    f2.Label1.Text = TextBox3.Text

    'Display the instance if it is new and focus it otherwise.
    f2.Show()
    f2.Activate()
End Sub