从窗体 1 更新窗体 2 的列表框,而无需再次创建窗体 2

  • 本文关键字:窗体 创建 更新 列表 vb.net
  • 更新时间 :
  • 英文 :


我有一个将数据从 Form1 传递到 Form2 的项目,Form1 将显示在监视器 1 中,Form2 将显示在监视器 2 中。我正在实现此结果,但每次我想更新 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

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

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

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()

通过在此处使用类名而不是该类型的变量,您引用了默认实例。 在此处阅读更多内容。

另一种方法是自己管理单个实例,这是您需要在默认实例之前在 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

最新更新