Es posible capturar valores de otros formularios utilizando la propiedad DialogResult, asociada a la instancia que se ha creado del formulario en cuestión. Para ello el usuario debe:
a) Crear la instancia del formulario que va a retornar el o los valores deseados. Ejemplo
Dim frm as new frmNombre
b) Al abrir el formulario, se deben realizar las operaciones necesarias de ingreso de información, luego al cerrar el formulario se debe agregar en el evento que cierra este la opción:
Me.DialogResult = DialogResult.OK
c) Esta opción le indicará al formulario que ha llamado al otro formulario que entregará los valores que la operación se ha realizado, esto se debe hacer de la siguiente forma:
If result = DialogResult.OK Then
' Realizar la captura de información.
End If
El siguiente ejercicio muestra como se debe capturar información desde un formulario que se ha invocado
Ejercicio 1
a) Crear un nuevo Proyecto Windows
b) Agregar un formulario con el nombre frmFormularioInicio, modificando las siguientes propiedades.
FormBorderStyle = FixsedSingle
Text = Formulario Nueva Mascota
MaximizeBox = False
MinimizeBox = False
c) Arrastrar desde el cuadro de herramientas un control GroupBox y agregar 2 label, 2 Textbox, 2 button, con las siguientes características
GroupBox1
Nombre = grbDatos
Text = Datos Personales
Lable 1
Name = lblNombre
Text = Nombre completo:
Label 2
Name = lblDireccion
Text = Dirección completa:
TextBox1
Nombre = txtNombre
TextBox2
Nombre = txtDireccion
Multicine = True
Button1
Nombre = btnNombre
Text = …
FlatStyle = Popup
Button2
Nombre = btnDireccion
Text = …
FlatStyle = Popup
Quedando el formulario de la siguiente forma:
a) Crear el formulario frmNombre, el cual entregará la información al formulario frmFormularioInicio, agregando los siguientes objetos.
frmNombre
Text = Datos Personales
FormBorderStyle = FixsedSingle
MaximizeBox = False
MinimizeBox = False
Label1
Nombre = lblNombre
Text = Nombre:
Label2
Nombre = lblAppPaterno
Text = Apellido Paterno
Label3
Nombre = lblAppMaterno
Text = Apellido Materno
TextBox1
Nombre = txtNombre
TextBox2
Nombre = txtAppPaterno
TextBox3
Nombre = txtAppMaterno
Label4
Nombre = lblAceptar
Label5
Nombre = lblCancelar
Button1
Nombre = btnAceptar
Text = …
FlatStyle = Popup
Button2
Nombre = btnCancelar
Text = …
FlatStyle = Popup
Quedando este de la siguiente forma:
a) En el método btnNombre_Click, que atiende el evento btnNombre.Click se deben agregar las siguientes líneas de código:
Dim frm As New frmNombre
Dim res As DialogResult = frm.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then
Me.txtNombre.Text = frm.txtNombre.Text + " " + frm.txtAppPaterno.Text + " " + frm.txtAppMaterno.Text
End If
b) En el evento btnAceptar.click del formulario frmNombre, agrege la siguiente línea de comando:
Me.DialogResult = Windows.Forms.DialogResult.OK
c) En el eventto btnCancelar.click del formulario frmNombre, agregar la siguiente línea de comando:
Me.Close()
O puede agregar la siguiente línea de comando
Me.DialogResult = Windows.Forms.DialogResult.Cancel
d) Ejecute la aplicación. Si se observa, cuando presiona el botón asociado al ingreso de nombre, aparecerá una interfaz que permitirá ingresar los datos del usuario, luego podrá verificar con el evento aceptar y el evento cancelar los resultados que se producen.
Ejericio 2
También la información se puede capturar mediante , como se muestra en el siguiente ejemplo, para lo cual utilizaremos parte de la solución creada con anterioridad.
a) Agregar a la solución que se ha creado un nuevo formulario, el cual se llamará frmDireccion, con los siguientes objetos:
frmDireccion
Text = Dirección Personal
FormBorderStyle = FixsedSingle
MaximizeBox = False
MinimizeBox = False
Label1
Nombre = lblCalle
Text = Calle:
Label2
Nombre = lblNumero
Text = Numero:
Label3
Nombre = lblPiso
Text = Piso:
Label4
Nombre = lblLetra
Text = Letra:
Label5
Nombre = lblCP
Text = CP:
Label6
Nombre = lblPoblacion
Text = Población:
Label7
Nombre = lblAceptar
Text = Aceptar
Label8
Nombre = lblCancelar
Text = Cancelar
Textbox1
Name = txtCalle
Textbox2
Text = txtNumero
Textbox3
Text = txtPiso
Textbox4
Text = txtLetra
Textbox5
Text = txtCP
Textbox6
Text = txtPoblacion
Button1
Name = btnAceptar
FlatStyle = Popup
Button2
Name = btnCancelar
FlatStyle = Popup
Quedando éste de la siguiente forma:
a) En el formulario frmDirección agregar la siguiente propiedad:
Public ReadOnly Property DireccionCompleta() As String
Get
Return Me.txtCalle.Text + " " + Me.txtNumero.Text + " " + Me.txtPiso.Text + " " + Me.txtLetra.Text + " " + Me.txtCP.Text + " " + Me.txtPoblacion.Text
End Get
End Property
b) En el evento clic del botón btnAceptar, agregar la siguiente línea de comando
Me.Visible = false
c) En el evento clic del botón btnCancelar, agregar la siguiente línea de comando
Me.Close()
d) Creamos una variable de tipo global, en el formulario frmFormularioInicio, en la clase del formulario, que será utilizada dentro del mismo:
Dim dfrm As frmDireccion
e) En el formulario frmFormularioInicio creamos el siguiente método, el cual estará encargado de capturar la información del formulario frmDirección y de cerrar el mismo:
Private Sub CierroDirecForm(ByVal bocata As Object, ByVal chorizo As EventArgs)
If Me.dfrm.Visible = False Then
' Colocamos la cadena devuelta por el form direccion en el textbox correspondiente.
Me.txtDireccion.Text = Me.dfrm.DireccionCompleta
' Cerramnos el formulario.
Me.dfrm.Close()
End If
End Sub
f) En el evento clic del botón asociado a la opción “Dirección completa:” del formulario frmFormularioInicio agregar las siguientes líneas de comando:
' Creamos la instancia
Me.dfrm = New frmDireccion
' Registramos el controlador para el evento VisibleChanged
AddHandler dfrm.VisibleChanged, AddressOf CierroDirecForm
' Mostramos el formulario.
Me.dfrm.Show()
Ejercicio 3 - Control de Posición de Foco
Se puede manejar la posición en donde se encuentra el cursor dentro de un formulario utilizando los eventos GotFocus y LostFocus de los textbox de un formulario.
Para mostrar como se realiza esta operación utilizaremos el formulario frmDirección
a) En el formulario frmDireccion crearemos un método que estará encargado de atender todos los eventos GotFocus de los TextBox que se encuentran dentro de este formulario, como se muestra en las siguientes líneas de comando:
Private Sub txt_GotFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtCalle.GotFocus, txtNumero.GotFocus, txtPiso.GotFocus, txtLetra.GotFocus, txtCP.GotFocus, txtPoblacion.GotFocus
End Sub
b) Dentro de éste método, definiremos el color que tomará la propiedad BackColor del texto en el cual se esta posicionado, para esto agregaremos en el método recién creado las siguientes líneas de comando:
' declaramos una variable para referenciar al control que obtiene el foco.
Dim txt As TextBox = CType(sender, TextBox)
' Cambiamos el color de fondo.
txt.BackColor = Color.Gold
c) Al cambiar a otro textbox el color de fondo debe ser restaurado, por lo cual, deberemos crear un método que atienda los eventos lostfocus de cada textbox, para esto se debe incluir el siguiente método:
Private Sub txt_LostFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtCalle.LostFocus, txtNumero.LostFocus, txtPiso.LostFocus, txtLetra.LostFocus, txtCP.LostFocus, txtPoblacion.LostFocus
End Sub
d) Dentro de éste método se debe hacer algo similar a lo anterior, pero con la salvedad de que el color de fondo de cada textbox debe volver a su color original, para esto, se deben incluir las siguientes líneas de código:
' declaramos una variable para referenciar al control que deja el foco.
Dim txt As TextBox = CType(sender, TextBox)
' Cambiamos el color de fondo.
txt.BackColor = Color.White
No hay comentarios:
Publicar un comentario