Dentro de un formulario MDI, es posible pasar información desde un formulario contenido a otro, utilizando delegados y lanzamiento de eventos, lo cual permite manejar eventos.
Dentro de este punto, utilizaremos controles treeview y listview, en formularios distintos, los cuales permitirán pasar la información entre ellos a través del formulario padre.
Adicionalmente veremos, como redimensionar formularios utilizando la configuración del equipos en el cual se esté trabajando.
Ejercicio 1
a) Crear un proyecto de WinForms.
b) Agregar un formulario con el nombre frmPadre, definiendo las siguientes propiedades:
frmPadre
Text = Formulario Padre
IsMDIContainer = True
StratPosition = Manual
FormBorderStyle = FxelSingle
c) Definidas las propiedades, en el Load del formulario frmPadre codificaremos las líneas de código que permitirán ajustar automáticamente los formularios al porte de la interfaz, sin necesidad de definir portes fijos, ya qe estos se acomodarán automáticamente. Las siguientes líneas de código, definen la automodificación de porte del formulario padre:
' Cambiamos el tamanio del formulario padre para que se ajuste al tamaño de la pantalla.
Me.Size = New Size(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height)
' Establecemos la posici'on de inicio del formulario.
Me.Location = New Point(0, 0)
d) Agregar formulario asignándole el nombre frmOrigen, definiendo las siguientes propiedades
FromBorderStyle = None
e) Agregar un TabControl con 2 pestañas.
TabControl1
Text = Cliente.
Anchor = Top, Bottom, Left, Right
f) En el TabPage1 realizar los siguientes cambios:
TabPage2
Text = Producto.
Agregar dos controles
Label1
Name = lblCliente
Text = Ingresra Nuevo Cliente:
Anchor = Top, Right
Button1
Name = btnCliente
Text = …
FlatStyle = Popup
Anchor = Top, Right
TreeView1
Name = trwCliente
Anchor = Top, Bottom, Left, Right
Quedando de la siguiente forma.
g) En el TabPage2 realizar los siguientes cambios:
TabPage2
Text = Producto.
Agregar dos controles
Label2
Name = lblProducto
Text = Ingresra Nuevo Producto:
Button2
Name = btnProducto
Text = …
FlatStyle = Popup
TreeView2
Name = trwProducto
Anchor = Top, Bottom, Left, Right
Quedando de la siguiente forma.
h) En el formulario frmPadre, en la sección de declaración general de la clase formulario, agregar la variable:
Dim Origen As frmOrigen
i) Crear el método que controlará el despliegue dentro del formulario contenedor del formulario frmOrigen
Private Sub frmOrigen_Crear()
End Sub
j) Dentro del método creado, se deben agregar las siguientes líneas de código:
' Definimos sus dimensiones.
Origen.Size = New Size(Me.ClientSize.Width * 0.3, Me.ClientSize.Height - 4)
' Definimos la localizacion del formulario hijo dentro del padre.\
Origen.StartPosition = FormStartPosition.Manual
Origen.Location = New Point(0, 0)
' Indicamos al formulario cual es su padre.
Origen.MdiParent = Me
' Mostramos el formulario.
Origen.Show()
k) En el evento Load del formulario padre, agregar las siguientes líneas de código al final del bloque de codificación
' Inicializamos la instancia del objeto
Me.Origen = New frmOrigen
' Llamamos a la función que definirá las dimenciones del frmOrigen
frmOrigen_Crear()
Ejecutar la solución.
l) Agregar a la solución el formulario frmDestino, definiendo las siguientes opciones:
Nombre = frmDestino
FormBorderStyle = None
m) En el formulario frmDestino, agregar el control ListView
Nombre = lswProducto
Anchor = Top, Bottom, Left, Right
Quedando de la siguiente forma.
n) En el formulario frmPadre, definir en la sección global la siguiente variable:
Dim Destino As frmDestino
ñ) Crear, en el formulario frmPadre, el método que creará las dimensiones del formulario frmDestino.
Private Sub frmDestino_Crear()
End Sub
o) Agregar las siguientes líneas de código dentro del método frmDestino_Crear
' Definimos sus dimensiones.
Destino.Size = New Size((Me.ClientSize.Width * 0.7) - 6, Me.ClientSize.Height * 0.5)
' Definimos la localizacion del formulario hijo dentro del padre.\
Destino.StartPosition = FormStartPosition.Manual
Destino.Location = New Point((Me.ClientSize.Width * 0.3) + 1, 0)
' Indicamos al formulario cual es su padre.
Destino.MdiParent = Me
' Mostramos el formulario.
Destino.Show()
p) En el evento Load del formulario padre, agregar las siguientes líneas de código al final del bloque de codificación
' inicializamos la instancia del objeto
Me.Destino = New frmDestino
' llamamos a la función que definirá las dimenciones del frmDestino
frmDestino_Crear()
Al ejecutar la solución el despliegue que se observará será el siguiente:
TRABAJANDO CON TREVIEW
a) Agregar un nuevo formulario con el nombre frmCliente, definiendo los siguientes controles:
Label1
Name = lblNombre
Text = Nombres
Label2
Name = lblAppPaterno
Text = Apellido Paterno
Label3
Name = lblAppMaterno
Text = Apellido Materno
Label4
Name = lblMail
Text = e-mail
Label5
Name = lblAceptar
Text = Aceptar
Label6
Name = lblCancelar
Text = Cancelar
TextBox1
Name = txtNombre
TextBox2
Name = txtAppPaterno
TextBox3
Name = txtAppMaterno
TextBox4
Name = txtMail
Button1
Name = btnAceptar
FlatStyle = Popup
Button2
Name = btnCancelar
FlatStyle = Popup
b) En el evento clic del botón btnAceptar, agregar la siguiente línea de código.
Me.DialogResult = Windows.Forms.DialogResult.OK
c) En el evento clic del botón btnCancelar, agregar la siguiente línea de código.
Me.Close()
d) En el evento clic del botón btnCliente, que se encuentra en el TabControl1 del formulario frmOrigen, agregar las siguientes líneas de código:
Dim frm As New frmCliente
Dim res As DialogResult = frm.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then
End If
f) Dentro del bloque if que se ha defindo anteriormente, agregar las siguientes líneas de código que cargarán la información ingresada en el formulario frmCliente al treview
Dim node As TreeNode
node = Me.trwCliente.Nodes.Add(frm.txtNombre.Text)
node.Nodes.Add(frm.txtAppPaterno.Text)
node.Nodes.Add(frm.txtAppMaterno.Text)
node.Nodes.Add(frm.txtMail.Text)
PASAR PARAMETROS DESDE UN FORMULARIO A OTRO UTILIZANDO DELEGADOS Y EVENTOS
Este ejercicio permitirá mostrar como es posible pasar parámetros desde un formulario a otro dentro de un contenedor utilizando eventos y variables delegadas.
Ejercicio
a) Agregar a la solución antes creada, el formulario frmProducto con los siguientes controles:
frmProducto
Text = Ingresar Producto
Label1
Name = lblNombre
Text = Nombre:
Label2
Name = lblCantidad
Text = Cantidad:
Label3
Name = lblPrecio
Text = Precio
Textbox1
Name = txtNombre
TextBox2
Name = txtCantidad
TextBox3
Name = txtPrecio
Button1
Name = btnAceptar
FlatStyle = Popup
Button2
Name = btnCancelar
FlatStyle = Popup
Quedando de la siguiente forma:
b) En el evento clic del botón btnAceptar, agregar la siguiente línea de código.
Me.DialogResult = Windows.Forms.DialogResult.OK
c) En el evento clic del botón btnCancelar, agregar la siguiente línea de código.
Me.Close()
d) Agregar en el evento clic, del botón btnProducto, que se encuentra en el TabPage2 del TabControl1, definido en el formulario frmOrigen, las siguientes líneas de código:
Dim frmP As New frmProducto
Dim resP As DialogResult = frmP.ShowDialog()
If resP = Windows.Forms.DialogResult.OK Then
Dim node As TreeNode
node = Me.trwPedidos.Nodes.Add(frmP.txtNombre.Text)
node.Nodes.Add(frmP.txtPrecio.Text)
node.Nodes.Add(frmP.txtCantidad.Text)
End If
e) En la sección de definición de variables, del formulario frmOrigen, especificar las siguientes variables:
Public Delegate Sub Param(ByVal nom As String, ByVal can As String, ByVal pre As String)
Public Event Par As Param
f) En el bloque if definido en el punto d) especificar la siguiente línea de comando, la cual estará encargada de lanzar un evento:
RaiseEvent Par(frmP.txtNombre.Text, frmP.txtCantidad.Text, frmP.txtPrecio.Text)
g) En el formulario frmDestino definir las siguientes líneas de código en el método que atiende el evento load del mismo:
Me.lvwDestino.View = View.Details
Me.lvwDestino.Columns.Add("Nombre", 150, HorizontalAlignment.Left)
Me.lvwDestino.Columns.Add("Cantidad", 150, HorizontalAlignment.Left)
Me.lvwDestino.Columns.Add("Precio", 150, HorizontalAlignment.Left)
Estas líneas definirán las columnas que administrará el listView definido en este formulario.
h) En el mismo formulario definir el método que cargará la información enviada desde el formulario padre, el cual estará encargado de capturar la información enviada desde el formulario frmOrigen:
Public Sub Capturar(ByVal nom As String, ByVal can As String, ByVal pre As String)
Me.lvwDestino.Items.Add(nom)
Me.lvwDestino.Items(0).SubItems.Add(can)
Me.lvwDestino.Items(0).SubItems.Add(pre)
End Sub
i) En el formulario frmPadre definir el método que enviará los parámetros al formulario de destino
Public Sub Par(ByVal nom As String, ByVal can As String, ByVal pre As String)
Me.Destino.Capturar(nom, can, pre)
End Sub
j) En el formulario frmPadre definir la captura del evento utilizando la sentencia addhandler, dentro del evento load, como se muestra en la siguiente líneas de código:
AddHandler Origen.Par, AddressOf Me.Par
No hay comentarios:
Publicar un comentario