VB.NET: ¿Cuál es la mejor manera de recuperar un valor de una segunda forma?
-
09-09-2019 - |
Pregunta
Estoy enseñando a mí mismo VB.Net.
Este es un problema poco me he encontrado. Decir que tengo un principal Form1 en mi solicitud. Form1 llama a una segunda LoginForm la que (como su nombre indica) es una ventana de conexión con los campos de nombre de usuario / contraseña tipo. el comportamiento esperado es que LoginForm capturará datos de acceso y pasar de nuevo a Form1.
¿Cuál es la mejor manera de hacer esto?
En mi mente, yo estaba pensando en la línea de una llamada de función como 'doLogin' que sería 'show' del LoginForm, capturar los datos introducidos, a disponer de la forma y devolver los datos de acceso (probablemente en algún tipo de frijol ). De alguna manera no veo que ésto sea posible
Lo que tengo actualmente es menos elegante. LoginForm se muestra por Form1 de forma modal (es decir showDialog); un 'yo' de referencia se pasa a la segunda ventana. Después de la entrada del usuario se ha recibido en LoginForm, puse un valor en Form1, luego deshacerse.
¿Es esta la forma en que todo el mundo lo hace?
Solución
Siempre me he pasado en un delegado a la segunda forma que puede ser llamado a 'pasar de nuevo' los valores de la segunda forma a la primera.
De esa manera usted está evitando cualquier acoplamiento fuerte.
patrón de observador clásico.
Un ejemplo de implementación es el siguiente:
Agregar una firma del delegado a Form1. En controlador de eventos de clic de botón de Form1, Form2 instancia de la clase y delegado de Form1. Asignar una función de Form2 al delegado, y llamar al delegado:
'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
En Form2, agregar una función a la que apuntará el delegado. Esta función le asignará el texto de textBox1 a label1.
'Form2.vb
Public Sub funData(ByVal text As TextBox)
label1.Text = text.Text
End Sub
Para pasar datos a Form1, basta con funData
una función que devuelve los valores que desee.
Otros consejos
A pesar de que esto es en C #, es fácil convertir: C # ayuda principiante, ¿Cómo pasar un valor a partir de un niño volver a la forma original?
También puede recuperar datos en VB.NET utilizando "My.Forms"
La toma a continuación el texto de un cuadro de texto en el LoginForm y la pone en un cuadro de texto en el formulario principal.
Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text