VB.NET: Каков наилучший способ получить значение из второй формы? - PullRequest
3 голосов
/ 12 апреля 2009

Я учу себя VB.Net.

Вот проблема, с которой я недавно столкнулся. Скажем, у меня есть основной Form1 в моем приложении. Form1 вызывает вторую LoginForm, которая (как следует из названия) является окном входа в систему с полями типа имя пользователя / пароль. Ожидаемое поведение заключается в том, что LoginForm будет собирать данные для входа и передавать их обратно в Form1.

Каков наилучший способ сделать это?

По-моему, я размышлял в духе вызова функции, например, doLogin, которая «показывала бы» LoginForm, собирала введенные данные, удаляла форму и возвращала данные для входа (возможно, в каком-то бине) ). Почему-то я не вижу в этом возможности

То, что у меня есть сейчас, менее изящно. LoginForm отображается формой Form1 (то есть showDialog); ссылка «я» передается во второе окно. После того, как пользовательский ввод был получен в LoginForm, я устанавливаю значение в Form1, а затем удаляю.

Так все это делают?

Ответы [ 3 ]

2 голосов
/ 12 апреля 2009
1 голос
/ 12 апреля 2009

Я всегда передавал делегат во вторую форму, которую можно вызвать, чтобы «передать» значения из второй формы в первую.

Таким образом, вы избегаете любой жесткой связи.

Классическая модель наблюдателя.


Пример реализации выглядит следующим образом:

Добавить подпись делегата в форму 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 голосов
/ 12 апреля 2009

Вы также можете получить данные в VB.NET, используя «My.Forms»

Ниже приведен текст из текстового поля в LoginForm и помещает его в текстовое поле в основной форме.

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