miércoles, 29 de febrero de 2012

21 - DialogResult pasar valores

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: