我正在自学VB.Net。
这是我最近遇到的一个问题。假设我的应用程序中有一个主Form1。 Form1调用第二个LoginForm(顾名思义)是一个带有用户名/密码类型字段的登录窗口。预期的行为是LoginForm将捕获登录详细信息并将它们传递回Form1。
这样做的最佳方式是什么?
在我看来,我正在思考像'doLogin'这样的函数调用,它会“显示”LoginForm,捕获输入的数据,处理表单并返回登录详细信息(可能在某种bean中) )。不知怎的,我认为这不可能
我目前所拥有的不那么优雅。 LoginForm以Form1模式显示(即showDialog); 'me'引用传递给第二个窗口。在LoginForm上收到用户输入后,我在Form1上设置一个值,然后处理。
这是每个人都这样做的吗?
答案 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