VB.NET:从第二种形式检索值的最佳方法是什么?

时间:2009-04-12 11:54:53

标签: vb.net show showdialog

我正在自学VB.Net。

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

这样做的最佳方式是什么?

在我看来,我正在思考像'doLogin'这样的函数调用,它会“显示”LoginForm,捕获输入的数据,处理表单并返回登录详细信息(可能在某种bean中) )。不知怎的,我认为这不可能

我目前所拥有的不那么优雅。 LoginForm以Form1模式显示(即showDialog); 'me'引用传递给第二个窗口。在LoginForm上收到用户输入后,我在Form1上设置一个值,然后处理。

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

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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函数返回您想要的值。

答案 2 :(得分:0)

您还可以使用“My.Forms”

在VB.NET中检索数据

下面从LoginForm中的文本框中获取文本,并将其放在主窗体的文本框中。

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