VB.NET:从第二个窗体检索值的最佳方法是什么?

3

我正在自学VB.Net。

这里有一个问题,最近我遇到了。假设我的应用程序中有一个主要的Form1。 Form1调用第二个LoginForm,它(正如名称所示)是一个带有用户名/密码类型字段的登录窗口。预期行为是LoginForm将捕获登录详细信息并将其传递回Form1。

最佳方法是什么?

在我看来,我想到了像“doLogin”这样的函数调用,它会“显示”LoginForm,捕获输入的数据,处理该表单并返回登录详细信息(可能是某种bean)。不知何故,我认为这不可能实现。

我目前拥有的东西不太优雅。 LoginForm由Form1以模态方式显示(即showDialog);对第二个窗口传递了一个“me”引用。在LoginForm上接收到用户输入后,我在Form1上设置了一个值,然后处理掉。

这是每个人都这样做的吗?

3个回答

2

1

我一直在第二个表单中传递一个委托,可以调用该委托将第二个表单中的值“回传”到第一个表单。

通过这种方式,您避免了任何紧密耦合。

经典的观察者模式。


一个示例实现如下:
在 Form1 中添加委托签名。在 Form1 的按钮单击事件处理程序中,实例化 Form2 类和 Form1 的委托。将 Form2 的一个函数分配给委托,并调用委托:
'Form1.vb
Public Delegate Sub delPassData(ByVal text As TextBox)

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  Dim frm As Form2 = New Form2
  Dim del As delPassData = New delPassData(AddressOf frm.funData)
  del(Me.textBox1)
  frm.Show()
End Sub

在 Form2 中添加一个函数,让委托指向该函数。该函数将把 textBox1 的文本赋值给 label1。
'Form2.vb
Public Sub funData(ByVal text As TextBox)
  label1.Text = text.Text
End Sub

为了将数据传回Form1,请将funData设置为返回所需值的函数。

0

你也可以使用 "My.Forms" 在 VB.NET 中检索数据

以下代码将从 LoginForm 的文本框中获取文本,并将其放入主窗体的文本框中。

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接