3

我正在自学VB.Net。

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

做这个的最好方式是什么?

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

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

每个人都这样吗?

4

3 回答 3

2

虽然这是在 C# 中,但很容易转换:C# 初学者帮助,如何将值从子窗体传递回父窗体?

于 2009-04-12T12:01:21.927 回答
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一个返回所需值的函数。

于 2009-04-12T12:01:18.320 回答
0

您还可以使用“My.Forms”在 VB.NET 中检索数据

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

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text
于 2009-04-12T12:05:44.613 回答