Sei sulla pagina 1di 50

PROGRAMACIÓN

.NET - II

SEMANA 3
Aplicaciones MDI

Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposición del público ni 1
ESTE DOCUMENTO CONTIENE LA SEMANA 3
utilizar los contenidos para fines comerciales de ninguna clase.

2
ESTE DOCUMENTO CONTIENE LA SEMANA 3

ÍNDICE

APLICACIONES MDI ............................................................................................................................ 4
OBJETIVO ESPECÍFICO .............................................................................................................................. 4
INTRODUCCIÓN ..................................................................................................................................... 4
1. APLICACIONES MDI ......................................................................................................................... 5
1.1. TRABAJO CON VENTANAS MDI ........................................................................................... 5
1.2. DISEÑO DE LA VENTANA HIJA MDI ................................................................................... 10
1.2.1 VENTANA DE BIENVENIDA Y EVENTO LOAD ............................................................. 10
1.2.2 DESDE EL MENÚ PRINCIPAL ...................................................................................... 14
2. ENSAMBLADO DE APLICACIONES .................................................................................................... 17
2.1. ENSAMBLADO DE APLICACIONES ..................................................................................... 17
2.2. CÓMO CREAR ENSAMBLADOS ......................................................................................... 18
2.3 MANIFIESTO DE UN ENSAMBLADO .................................................................................. 20
2.4 CÓMO AGREGAR ENSAMBLADOS A UNA APLICACIÓN .................................................... 21
2.5 CÓMO USAR UN ENSAMBLADO ....................................................................................... 23
3. HERRAMIENTAS VISUALES ............................................................................................................. 25
3.1 UTILIZACIÓN DE TABCONTROL (FICHAS) .......................................................................... 26
3.2 UTILIZACIÓN DE LISTBOX .................................................................................................. 26
3.3 UTILIZACIÓN DE COMBOBOX ........................................................................................... 27
3.4 EJEMPLO 1 ........................................................................................................................ 28
3.5 EJEMPLO 2 ........................................................................................................................ 41
COMENTARIO FINAL ......................................................................................................................... 48
REFERENCIAS ....................................................................................................................................... 49

3
ESTE DOCUMENTO CONTIENE LA SEMANA 3

APLICACIONES MDI

OBJETIVO ESPECÍFICO
• Utilizar ventanas MDI y herramientas visuales en el desarrollo de aplicaciones integradas.

INTRODUCCIÓN
El presente material tiene como objetivo fundamental introducir al alumno en el mundo de las
aplicaciones con ventanas MDI, desde las cuales se puede desplegar un sinnúmero de “ventanas
hijas”, conformando de esta manera una aplicación completa.

Además, se estudiarán nuevas herramientas gráficas, tales como los TabControls, TabPages,
ListBoxes y ComboBoxes, las que permiten hacer grandes mejoras en las aplicaciones, logrando
que estas sean más amigables y óptimas. Como se verá, el alumno podrá darse cuenta de que en
más de una ocasión ha usado aplicaciones que poseen estos controles.

Antiguamente, cada vez que se requería una DLL (dynamic link library, “biblioteca de enlace
dinámico” en español) para que una aplicación funcionara, era necesario registrarla en el archivo
de registro (registry), lo que a veces producía conflictos debido a problemas de compatibilidad. No
obstante, con la opción de ensamblados se podrá conocer las nuevas opciones que ofrece Visual
Studio .NET para evitar ese tipo de problemas.

4
ESTE DOCUMENTO CONTIENE LA SEMANA 3

1. APLICACIONES MDI
MDI es la sigla en inglés para interfaces de documentos múltiples (multiple documents interfaces),
lo que proporciona funcionalidades cuando de una “ventana padre” se requieren “ventanas hijas”.
Para lograr esto, generalmente se utilizan opciones de menú que permitirán visualizar varias
pantallas juntas, cada una independiente de la otra, pero que residen dentro del mismo
componente padre, que actúa como contenedor.

1.1. TRABAJO CON VENTANAS MDI


En términos generales, una ventana MDI es una gran ventana contenedora sobre la que se pueden
desplegar otras pantallas (forms) a partir de opciones de menú. Es decir, la ventana MDI por sí sola
es inerte, es solo un “marco”.

Para comprender mejor cómo funciona una ventana MDI, se recurrirá a un ejemplo. Por lo tanto,
se crea un nuevo proyecto con un formulario, y la propiedad IsMdiContainer se deja con el valor
True.

5
ESTE DOCUMENTO CONTIENE LA SEMANA 3

De inmediato, el form cambia su aspecto:

Otras propiedades importantes a configurar:

- WindowState: Maximized (se sugiere configurarla siempre de ese modo)


- Name: frVentanaMDI
- Text: Trabajando con Ventanas MDI

Además, se puede agregar una imagen de fondo mediante la propiedad BackgroundImagen.

Se da clic en los 3 puntos suspensivos y se visualiza la siguiente pantalla:

6
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se da clic en el botón Import…, y se abre la clásica ventana de Windows para seleccionar una
imagen.

7
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se selecciona una imagen, y se da clic en el botón Abrir. Luego se visualiza lo siguiente:

Y se da clic en OK.

Al volver al diseño, no se ve la imagen en el formulario, pero en la propiedad BackgoundImage se


puede ver una miniatura de la imagen.

Posicionando el mouse sobre el nombre de la imagen, se ve lo siguiente:

8
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Aquí se indica que la imagen de fondo forma parte de los recursos (resources) del proyecto. Esto
también se puede ver en el panel de la esquina superior derecha.

La ejecución muestra lo siguiente: una ventana que ocupa toda la pantalla, y con la imagen de
fondo seleccionada.

9
ESTE DOCUMENTO CONTIENE LA SEMANA 3

1.2. DISEÑO DE LA VENTANA HIJA MDI


Una ventana hija MDI corresponde a un formulario que se despliega dentro de la ventana MDI
contenedora. La manera más simple es desplegarla mediante un ítem de menú, o bien desde el
evento Load() de la ventana MDI.

1.2.1 VENTANA DE BIENVENIDA Y EVENTO LOAD

Un ejemplo muy interesante es mostrar una ventana de bienvenida de una duración de 5


segundos al momento de ingresar a la aplicación (también llamada Splash). Para ello, se crea un
nuevo formulario, con un label en el centro. Las propiedades son las siguientes:

Para el Form2:

- Name: fmBienvenida
- BackColor: Black
- FormBorderStyle: None
- StartPosition: CenterScreen

Para el Label1:

- Name: lbBienvenida
- BackColor: Black
- Font.Size: 30
- ForeColor: DarkOrange
- Text: Bienvenido a mi Sistema

Y el diseño se ve de la siguiente manera:

Además, se debe agregar un control Timer al formulario correspondiente a la ventana MDI, que en
el ToolBox se encuentra en la sección Components.

10
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Y el diseño se ve de la siguiente manera:

La idea del Timer es que ejecute una acción cada cierto intervalo de tiempo. Dicha acción se
realiza en el evento Tick del Timer. Entonces, el ejemplo consiste en mostrar la pantalla de
bienvenida durante 5 segundos. El código es el siguiente:

11
ESTE DOCUMENTO CONTIENE LA SEMANA 3



Public Class fmVentanaMDI
Private fMensaje As New fmBienvenida
Private contador As Integer

Private Sub fmVentanaMDI_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
contador = 0
Timer1.Enabled = True
Timer1.Interval = 1000
fMensaje.MdiParent = Me
fMensaje.Show()

End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer1.Tick
contador = contador + 1
If contador = 5 Then
fMensaje.Close()
Timer1.Enabled = False
End If
End Sub
End Class



Se define la variable contador, que es global y se puede usar en cualquier método de la clase
fmVentanaMDI. Además, se configura que el intervalo del Timer es de 1000 milisegundos, es decir,
1 segundo, que corresponde a la frecuencia con que se ejecuta el método Tick, mientras el Timer
está disponible. Entonces, en el evento Load() se habilita el Timer y se muestra la ventana hija,
llamada fmMensaje. Cada 1000 milisegundos se ejecuta el evento Tick, y cada vez que se ejecuta
aumenta el contador en 1. Cuando el contador llega a 5 (que indica que ya pasaron 5000
milisegundos, o bien, 5 segundos), la ventana de bienvenida se cierra y el Timer se deshabilita. La
ejecución muestra lo siguiente (durante 5 segundos):

12
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Si una vez que se cierra la ventana de bienvenida se quisiera mostrar otra ventana hija, bastaría
con modificar el código del evento Tick. Esto supone la existencia de otro formulario que esté
disponible para ser mostrado. En este caso, se creó otro formulario con las propiedades:

- Name: fmVentanaHijaMDI
- Text: Ventana Hija MDI

Y el código del evento Tick queda de la siguiente manera:




Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Timer1.Tick
contador = contador + 1
If contador = 5 Then
fMensaje.Close()
Timer1.Enabled = False
Dim fVentanaHija As New fmVentanaHijaMDI
fVentanaHija.MdiParent = Me
fVentanaHija.Show()
End If
End Sub


Nótese el uso de la propiedad MdiParent. Esta indica que la “ventana padre” de la “ventana hija”
es Me, que es una referencia a la clase fmVentanaMDI.

Y la ejecución muestra lo siguiente, una vez que se cierra la ventana de bienvenida:

13
ESTE DOCUMENTO CONTIENE LA SEMANA 3



Si no se usara la ventana de bienvenida, el código remarcado en negrita se escribe en el evento
Load() de la ventana MDI, y el código queda así:




Public Class fmVentanaMDI

Private Sub fmVentanaMDI_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Dim fVentanaHija As New fmVentanaHijaMDI

fVentanaHija.MdiParent = Me
fVentanaHija.Show()
End Sub
End Class


1.2.2 DESDE EL MENÚ PRINCIPAL

Otra forma de desplegar una ventana hija es mediante una opción del menú principal, que va
anclado a la ventana MDI.

A la ventana MDI del ejemplo anterior se le agregará un control MenuStrip, que contendrá un ítem
de menú desde el cual se desplegará una ventana hija. No se usará el Timer.

14
ESTE DOCUMENTO CONTIENE LA SEMANA 3

El diseño se ve de la siguiente manera:



Y se crea la opción de menú Abrir y el ítem de menú Ventana Hija:



Se da doble clic en el ítem de menú para escribir el código:



Public Class fmVentanaMDI

Private Sub VentanaHijaToolStripMenuItem_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
VentanaHijaToolStripMenuItem.Click
Dim fVentanaHija As New fmVentanaHijaMDI
fVentanaHija.MdiParent = Me
fVentanaHija.Show()

End Sub
End Class


15
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Y en la ejecución se tiene (con la ventana principal sin maximizar):


Seleccionando la opción Ventana Hija, se despliega la Ventana Hija MDI:

16
ESTE DOCUMENTO CONTIENE LA SEMANA 3

2. ENSAMBLADO DE APLICACIONES
2.1. ENSAMBLADO DE APLICACIONES
Como se ha visto hasta ahora, en el entorno de desarrollo de Visual Studio se puede organizar el
desarrollo en una solución, que a su vez puede tener uno o muchos proyectos, y dentro de cada
proyecto pueden existir uno o más archivos de código fuente o recursos en general (imágenes,
archivos de configuración, etc.). Ahora bien, en el momento en que se compila la aplicación, se
genera un componente denominado ensamblado, que es un archivo generado por Visual Studio
que contiene el código que se escribió para la aplicación en un formato que puede ser entendido
por el computador para ejecutar el programa.

En Visual Basic se utiliza el contenido de los ensamblados y se agregan referencias a dichos


ensamblados, de forma muy parecida a como se utilizaban las bibliotecas de tipos en versiones
anteriores de Visual Basic. No obstante, lo que distingue a los ensamblados de los archivos .exe o
.dll de versiones anteriores de Windows es que pueden contener toda la información que antes se
encontraba en una biblioteca de tipos, además de la información de todo aquello que sea
necesario para utilizar la aplicación o el componente.

Un ensamblado, en general, puede ser de dos tipos:

1. Ejecutable: se refiere a un archivo con extensión .exe que puede ejecutar la aplicación al
hacer doble clic sobre el mismo, por ejemplo:


Al hace doble clic, se muestra la aplicación:

17
ESTE DOCUMENTO CONTIENE LA SEMANA 3

2. Librería de datos: corresponde a un archivo con extensión .dll que por sí solo no es
ejecutable (no sucederá nada al hacer doble clic sobre el archivo), pero que en cambio
tiene código de ayuda para que un ensamblado ejecutable (.exe) pueda realizar su trabajo
como el usuario lo espera, por ejemplo:

2.2. CÓMO CREAR ENSAMBLADOS


Como se mencionó anteriormente, un ensamblado se crea al momento de compilar un proyecto, y
se realiza de la siguiente manera: tomando como ejemplo el mismo proyecto de la ventana MDI,
ingresar al menú Build (Generar), y seleccionar el ítem Configuration Manager…



De la ComboBox, seleccionar Release y presionar el botón Close.

18
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Nuevamente acceder al menú Build y seleccionar la opción Build <nombre del proyecto>. En este
caso, Build VentanaMDI.

La barra de estado de Visual Studio indica que se compiló exitosamente:

Y en el directorio del proyecto se tiene el archivo .exe.

19
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Esto significa que al dar doble clic a ese archivo, se abrirá la aplicación creada en el ejemplo.
Entonces, ese archivo .exe corresponde al ensamblado de la aplicación, e internamente contiene
“referencias” a las fuentes, imágenes y todos los archivos que se requieren para que funcione
correctamente.

2.3 MANIFIESTO DE UN ENSAMBLADO


Todos los ensamblados tienen un manifiesto del ensamblado, que corresponde a una tabla de
contenido, y que se compone de lo siguiente:

- La identificación de ensamblado (nombre y versión)


- Una tabla que describe los demás archivos que forman parte del ensamblado, como por
ejemplo, otros ensamblados, imágenes, readme.txt, etc.
- Una lista de referencias de ensamblado, que corresponde a todas las dependencias
externas, tales como .dll y otros archivos que requiere la aplicación del ensamblado para
funcionar correctamente

Todo esto conforma una ventaja significativa, ya que no es necesario modificar el archivo de
registro (registry) para que se cataloguen las DLL’s, de esta forma se reducen los conflictos de
estas y además las aplicaciones son más seguras y de fácil implementación y transporte.

El archivo de manifiesto se identifica por tener extensión .manifest, como se ve en la siguiente


imagen:

20
ESTE DOCUMENTO CONTIENE LA SEMANA 3

2.4 CÓMO AGREGAR ENSAMBLADOS A UNA APLICACIÓN


En Visual Studio .NET, si una aplicación requiere utilizar algún ensamblado externo, se referencian
de manera similar a como se hacía en versiones anteriores de Visual Basic, con la salvedad de que
ahora los ensamblados contienen todo lo necesario para usar la aplicación, y no es necesario
importar o hacer referencia a otros archivos adicionales.

Por ejemplo, para la aplicación VentanaMDI se agregará el ensamblado mencionado en el punto


2.1, correspondiente a Operaciones Matematicas.exe.

Para ello, se ingresa al menú Project y luego a la opción Add Reference…

Y en pantalla que aparece, se accede a la Ficha Browse.

21
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se busca y se selecciona el archivo .exe correspondiente.

Y en el Explorar de Soluciones (Solution Explorer) se puede ver la referencia cargada:

22
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se hace doble clic en OperacionesMatematicas y se muestra(n) la(s) clase(s) que contiene. En este
caso, la clase frOperaciones.

2.5 CÓMO USAR UN ENSAMBLADO


Una vez referenciado el ensamblado, y conociendo su contenido, es posible hacer uso de sus
clases en el proyecto principal.

Al menú principal de la Ventana MDI se le agregará un nuevo ítem, con nombre Operaciones,
como se muestra en la siguiente figura:

23
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Al principio del código de la clase se debe agregar la sentencia Imports, asignando un alias al
namespace asociado a la clase frOperaciones.



Imports FRMOperaciones = WindowsApplication1.frOperaciones


Y en el código del ítem de menú se instancia el alias de la clase.





Private Sub OperacionesToolStripMenuItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
OperacionesToolStripMenuItem.Click

Dim fOperaciones As New FRMOperaciones
fOperaciones.MdiParent = Me
fOperaciones.Show()

End Sub


Y en el resultado obtenido, se escoge la opción Operaciones:

24
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Y se despliega la pantalla:

Y si se minimiza la pantalla, se puede apreciar que efectivamente la pantalla es una ventana hija
de la ventana MDI.

Se invita al alumno a conocer más sobre los ensamblados visitando las referencias Ensamblados.a,
Ensamblados.b y Ensamblados.c.

3. HERRAMIENTAS VISUALES
Anteriormente, ya se ha estudiado la creación de formularios, y algunos controles básicos que se
pueden agregar para comenzar a conformar una aplicación relativamente simple. Además, se
reconoció también la importancia del uso de lápices y diversas formas de “dibujar” en un
formulario. En esta semana se conocerán otros controles muy usados y muy útiles en los
formularios: TabControl, ListBox y ComboBox, y finalmente se mostrará un ejemplo del uso de
estos.

25
ESTE DOCUMENTO CONTIENE LA SEMANA 3

3.1 UTILIZACIÓN DE TABCONTROL (FICHAS)


El uso de tabs (sichas) es de gran utilidad cuando se desea tener muchas funcionalidades en una
misma ventana, o bien, cuando se trata de ingresar muchos datos y no se dispone de espacio
suficiente en la pantalla, y es necesario dividir la información en secciones. Por ejemplo, si una
jefatura realizara una consulta sobre un empleado en particular, en una primera ficha se podría
tener sus datos personales, en una segunda ficha los períodos que se ha tomado de vacaciones, en
una tercera los períodos de licencias médicas, y en una cuarta sus evaluaciones de desempeño.

En el ToolBox, el TabControl se encuentra en la sección Containers.

Los constructores, métodos, eventos y propiedades más usados de los


TabControl se pueden conocer y revisar en el Recurso Adicional 1:
“Métodos, eventos y propiedades de esta semana”, págs. 1-2.

Se invita al alumno a conocer más eventos, métodos y propiedades de los TabControl en la


referencia bibliográfica indicada como Microsoft (2016a).

3.2 UTILIZACIÓN DE LISTBOX


Las ListBox han sido ampliamente usadas para mostrar al usuario una lista de elementos, desde la
cual puede seleccionar uno o más elementos. Se dispone de varios métodos, como por ejemplo
agregar o quitar elementos de la lista, búsqueda de elementos dentro de la lista, etc. En el
Toolbox, se encuentra en la sección Common Controls.

26
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Los constructores, métodos, eventos y propiedades más usados de los


ListBox se pueden conocer y revisar en el Recurso Adicional 1: “Métodos,
eventos y propiedades de esta semana”, págs. 3-5.

Se invita al alumno a conocer más eventos, métodos y propiedades de los ListBox en la referencia
bibliográfica indicada como Microsoft (2016c).

3.3 UTILIZACIÓN DE COMBOBOX
Un ComboBox es un objeto que combina un cuadro de texto (TextBox) y una lista desplegable
(ListBox), permitiendo al usuario seleccionar uno y solo uno de los elementos de ella, o bien
escribir un valor. Esto último dependerá de si la ComboBox es o no editable. También se dispone
de métodos que permiten agregar y quitar elementos, buscar alguno en particular, ordenarla, etc.
En el Toolbox, se encuentra en la sección Common Controls.

27
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Los constructores, métodos, eventos y propiedades más usados de los


ComboBox se pueden conocer y revisar en el Recurso Adicional 1:
“Métodos, eventos y propiedades de esta semana”, págs. 6-7.

Se invita al alumno a conocer más eventos, métodos y propiedades de los ComboBox en la


referencia bibliográfica indicada como Microsoft (2016d).

3.4 EJEMPLO 1
A continuación, se desarrollará un ejemplo en el que se deben ingresar varios datos de una
persona, separados por fichas. Las fichas contendrán:

• Datos personales
• Datos de estudio de educación superior
• Pasatiempos

Para esto, se creará un nuevo proyecto, y un nuevo formulario.

Para comenzar, se agregará un TabControl que, por defecto, se compone de 2 fichas.

28
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Los constructores, métodos, eventos y propiedades más usados de los


TabPages se pueden conocer y revisar en el Recurso Adicional 1:
“Métodos, eventos y propiedades de esta semana”, págs. 2-3.

Se invita al alumno a conocer más eventos, métodos y propiedades de los TabPages en la


referencia bibliográfica indicada como Microsoft (2016b).

Antes de continuar, es necesario hacer un alcance. Un TabControl se compone de TabPages.


Entonces, para acceder a las propiedades del TabControl, se debe estar posicionado en este, como
se muestra en la siguiente figura:



Para acceder a las propiedades de un TabPage, se debe estar posicionado en la TabPage a la que
se le desea modificar alguna propiedad o agregar algún control, tal como se muestra en la
siguiente figura:



Según el ejemplo planteado, se requerirán 3 fichas. Por lo tanto, se agregará la que falta. Dado que
la colección de fichas es una propiedad del TabControl, entonces es necesario posicionarse en este

29
ESTE DOCUMENTO CONTIENE LA SEMANA 3

y acceder a la propiedad TabPage y dar clic a los 3 puntos suspensivos . Al hacerlo se verá lo
siguiente:



Se da clic en el botón Add, y se agrega la tercera TabPage.



En esta misma instancia se pueden configurar algunas propiedades de las TabPages.

Para la TabPage1, se tiene:

- Name: tpPersonales
- BackColor: LightGray
- BorderStyle: Fixed3D
- Text: Datos Personales

Y queda de la siguiente manera:

30
ESTE DOCUMENTO CONTIENE LA SEMANA 3



Para la TabPage2, se tiene:

- Name: tpEstudios
- BackColor: CadetBlue
- BorderStyle: Fixed3D
- Text: Estudios

Y queda de la siguiente manera:



Para la TabPage3, se tiene:

- Name: tpHobbies
- BackColor: YelloweGreen
- BorderStyle: Fixed3D
- BackGroundImage: se carga una imagen cualquiera, similar a como se carga en los
formularios.
- Text: Hobbies

Y queda de la siguiente manera:

31
ESTE DOCUMENTO CONTIENE LA SEMANA 3



Ahora, se agregarán los controles correspondientes a cada una de las TabPages creadas.

En la TabPage de los Datos Personales se agregan 4 Labels, 3 TextBoxes, 2 RadioButtons y un
GroupBox.




Y se tiene que:

Para el Label1: Para el Label3:
- Name: lbNombre - Name: lbSexo
- Text: Nombre - Text: Sexo

Para el Label2: Para el Label4:
- Name: lbApellido - Name: lbDireccion
- Text: Apellido - Text: Dirección

32
ESTE DOCUMENTO CONTIENE LA SEMANA 3


Para el TextBox1: Para el radioButton1:
- Name: txNombre - Name: rbMasculino
- Checked: True
Para el TextBox2: - Text: Masculino
- Name: txApellido
Para el radioButton2:
Para el TextBox3: - Name: rbFemenino
- Name: txDireccion - Text: Femenino

Y todos los controles con Font.Size = 10

En el TabPage de los Estudios, se agregan 4 Labels y 4 ComboBoxes.



Y se tiene que:

Para el Label5: Para el Label7:
- Name: lbInstitucion - Name: lbAnnos
- Text: Institución - Text: Años de Estudio

Para el Label6: Para el Label8:
- Name: lbCarrera - Name: lbSituacion
- Text: Carrera - Text: Situación


Para poblar una ComboBox, se selecciona y se da clic en los tres puntos suspensivos de la
propiedad Items.

Para la CombBox1:
- Name: cbInstitucion
- BackColor: Turquoise
- Items:


33
ESTE DOCUMENTO CONTIENE LA SEMANA 3



- MaxDropDownItems: 5
- Sorted: True

Para la CombBox2:
- Name: cbCarrera
- BackColor: Silver
- Items:



Para la CombBox3:
- Name: cbAnnos
- BackColor: Window
- Items:

34
ESTE DOCUMENTO CONTIENE LA SEMANA 3



Para la CombBox4:
- Name: cbSituacion
- BackColor: LightSalmon
- ForeColor: MidnightBlue
- Items:



En el TabPage de los Hobbies, se agregan 2 Labels y 2 ListBoxes.

35
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Para el Label9: Para el Label10:


- Name: lbHobbies - Name: lbDeporte
- Text: Selecciones Hobbies - Text: Seleccione un Deporte


Para poblar una ListBox, se selecciona y se da clic en los tres puntos suspensivos de la
propiedad Items.

Para la ListBox1:
- Name: lbxHobbies
- BackColor: GainsBoro
- Items:


- SelectionMode: MultiSimple

Para la ListBox2:
- Name: lbxDeportes
- BackColor: GainsBoro
- Items:

36
ESTE DOCUMENTO CONTIENE LA SEMANA 3

- ScrollAlwaysVisible: True
- Sorted: True

Y todos los controles con Font.Size = 10

La ejecución muestra el despliegue de las ComboBoxes.

ComboBox de Instuticiones ComboBox de Carreras



ComboBox de Años de Estudio ComboBox de Situación





Con respecto a las ListBoxes, se puede apreciar que en la de Hobbies, se pueden seleccionar
varias, mientras que en la de Deportes solo una.

37
ESTE DOCUMENTO CONTIENE LA SEMANA 3

También se agregará un botón para darle algo de funcionalidad a esta pantalla. La idea es que al
dar clic al botón se muestre un MessageBox que contenga la información ingresada.
El código del botón, con las validaciones respectivas suponiendo que los campos son obligatorios,
queda así:


Public Class Form1
Private Sub btResumen_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btResumen.Click
Dim resumen, sexo, hobbies As String
hobbies = ""
If txNombre.Text = "" Then
MessageBox.Show("Debe ingresar un nombre")
Exit Sub
End If
If txApellido.Text = "" Then
MessageBox.Show("Debe ingresar un apellido")
Exit Sub
End If
If txDireccion.Text = "" Then
MessageBox.Show("Debe ingresar un dirección")
Exit Sub
End If
If cbInstitucion.Text = "" Then
MessageBox.Show("Debe ingresar una Institución")
Exit Sub
End If

If cbCarrera.Text = "" Then
MessageBox.Show("Debe ingresar una Carrera")
Exit Sub
End If
If cbAnnos.Text = "" Then
MessageBox.Show("Debe ingresar Años")
Exit Sub
End If

If cbSituacion.Text = "" Then
MessageBox.Show("Debe ingresar una Situación")
Exit Sub
End If
If lbxHobbies.SelectedIndex = -1 Then
MessageBox.Show("Debe ingresar al menos 1 Hobbie")
Exit Sub
Else
For Each hobbie In lbxHobbies.SelectedItems
hobbies = hobbies & " " & hobbie.ToString
Next
End If
If lbxDeportes.SelectedIndex = -1 Then
MessageBox.Show("Debe ingresar 1 deporte")
Exit Sub
End If

If rbFemenino.Checked = True Then
sexo = "femenino"
Else
sexo = "masculino"
End If

38
ESTE DOCUMENTO CONTIENE LA SEMANA 3


resumen = "DATOS PERSONALES" & vbCrLf & _
"================" & vbCrLf & _
"Nombre : " & txNombre.Text & vbCrLf & _
"Apellido: " & txApellido.Text & vbCrLf & _
"Sexo : " & sexo & vbCrLf & _
"Dirección: " & txDireccion.Text & vbCrLf & vbCrLf & _
"ESTUDIOS " & vbCrLf & _
"========" & vbCrLf & _
"Institucion : " & cbInstitucion.Text & vbCrLf & _
"Carrera : " & cbCarrera.Text & vbCrLf & _
"Años Estudio: " & cbAnnos.Text & vbCrLf & _
"Situación: " & cbSituacion.Text & vbCrLf & vbCrLf & _
"PASATIEMPOS" & vbCrLf & _
"===========" & vbCrLf & _
"Hobbies : " & hobbies & vbCrLf & _
"Deportes : " & lbxDeportes.SelectedItem

MessageBox.Show(resumen)

End Sub
End Class


La ejecución es la siguiente:

39
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Y al dar clic en el botón, se tiene:


Por ejemplo, si no se hubiera seleccionado ningún “hobbie”, al resultado sería:

40
ESTE DOCUMENTO CONTIENE LA SEMANA 3

En el código, nótese el uso de la propiedad SelectedIndex de las ListBoxes. Cuando su valor es -1


indica que no se ha seleccionado ningún ítem de la ListBox, es la forma de validar dicha situación.
A su vez, para obtener los ítems seleccionados, primero se usa la propiedad SelectedItems, que
devuelve una lista con los ítems seleccionados, y luego se recorre esa lista mediante el uso de la
instrucción For Each.

3.5 EJEMPLO 2
Una utilidad muy usada de las ListBoxes es el “traspaso” de ítems de una a otra. A continuación se
desarrollará un ejemplo de “carro de compras” en que el usuario tiene que seleccionar los ítems
para trasladarlos a su carro. Para ello, se creará un nuevo proyecto, con un nuevo formulario.

Se agrega 1 Panel, 1 Label, 2 ListBoxes y 2 Buttons. El diseño se ve así:

41
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Para el Form1: Para el Panel1:


- Name: frDormitorio - Name: pnDormitorio
- Text: Artículos de Dormitorio - Location: 1, 1
- Size: 421, 66
Para el Button1: - BackColor: DarkSlateGray
- Name: btAgregar
- Text: >> Para el Label1:
- Name: lbDormitorio
Para el Button2: - Text: Dormitorio
- Name: btEliminar - Font.Size: 30
- Text: << - ForeColor: White

Para la ListBox1:
- Name: lbxArticulos
- BackColor: Khaki
- Font.Size: 10
- Items:


- SelectionMode: MultiSimple


Para la ListBox2:
- Name: lbxCargados
- Font.Size: 10
- SelectionMode: MultiSimple
- Sorted: True

La ejecución arroja lo siguiente:

42
ESTE DOCUMENTO CONTIENE LA SEMANA 3



La idea es seleccionar uno o más ítems en la ListBox de la izquierda, y que al presionar el botón >>,
los ítems seleccionados se traspasen a la ListBox de la derecha y a la vez desaparezcan de la lista
izquierda. Y si se desea retirar un ítem de la lista derecha, se presiona el botón << y el ítem vuelve
a la lista de la izquierda.

Nótese que la lista izquierda está desordenada. Se ordenará en el evento Load del formulario.



Public Class fmDormitorio
Private Sub fmDormitorio_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
lbxArticulos.Sorted = True
End Sub

End Class

43
ESTE DOCUMENTO CONTIENE LA SEMANA 3

El código para el botón >> (para agregar) es el siguiente:




Private Sub btAgregar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btAgregar.Click
If lbxArticulos.SelectedIndex = -1 Then
MessageBox.Show("Debe seleccionar algún artículo")
Exit Sub
Else
lbxCargados.BeginUpdate()

For Each articulo In lbxArticulos.SelectedItems
lbxCargados.Items.Add(articulo)
Next
lbxCargados.EndUpdate()
Dim items As Integer = lbxArticulos.Items.Count - 1
lbxArticulos.BeginUpdate()
For indice As Integer = items To 0 Step -1
If lbxArticulos.GetSelected(indice) Then
lbxArticulos.Items.RemoveAt(indice)
End If
Next
lbxArticulos.EndUpdate()
End If
End Sub


Y el código del botón << (para eliminar) es muy similar al anterior, pero con las listas cambiadas.



Private Sub btRetirar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btRetirar.Click
If lbxCargados.SelectedIndex = -1 Then
MessageBox.Show("Debe seleccionar algún artículo cargado")
Exit Sub
Else
lbxArticulos.BeginUpdate()
For Each articuloCargado In lbxCargados.SelectedItems

lbxArticulos.Items.Add(articuloCargado)
Next
lbxArticulos.EndUpdate()

Dim items As Integer = lbxCargados.Items.Count - 1


lbxCargados.BeginUpdate()
For indice As Integer = items To 0 Step -1
If lbxCargados.GetSelected(indice) Then
lbxCargados.Items.RemoveAt(indice)
End If
Next
lbxCargados.EndUpdate()
End If
End Sub

44
ESTE DOCUMENTO CONTIENE LA SEMANA 3

En el código anterior, preste atención a lo siguiente:



• El uso de los métodos BeginUpdate y EndUpdate no es obligatorio, pero se
recomienda usarlos cada vez que se realice alguna actualización en la lista.
• El uso del método GetSelected devuelve un valor booleano e indica si el ítem asociado
al índice está o no seleccionado.
• El uso de los métodos Add y RemoveAt agrega y remueve ítems de la lista.

Y la ejecución es la siguiente:

Se seleccionan algunos artículos:

45
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se da clic al botón >>. Se puede apreciar que en la lista de la derecha se cargan los artículos
seleccionados y a la vez se eliminan de la lista de la izquierda.

Ahora, se seleccionan elementos de la lista de la derecha:

46
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Se da clic al botón <<, se eliminan los artículos de la lista de la derecha y estos se cargan en la lista
de la izquierda, manteniendo el orden alfabético.

47
ESTE DOCUMENTO CONTIENE LA SEMANA 3

COMENTARIO FINAL
Resulta inconmensurable la cantidad de aplicaciones que se pueden desarrollar con lo aprendido
esta semana. Hoy en día, prácticamente todas las aplicaciones de escritorio se componen de una
Ventana MDI contenedora sobre la cual se despliegan muchas ventanas según las opciones de
menú que presente la aplicación. Además, todas esas ventanas hijas se pueden maximizar y
minimizar dentro de la misma pantalla MDI padre. No se debe olvidar el plus que se le puede dar a
una aplicación con una ventana de bienvenida.

La utilidad de los TabControls y TabPages no tiene límites, pues permiten optimizar mucho espacio
en la pantalla, y además organizar de mejor manera los datos, ya sea para efectuar ingresos como
consultas.

A lo anterior, se suma el uso de ListBox y ComboBox, hoy en día muy utilizados tanto en
aplicaciones de escritorio como en aplicaciones web. En esta semana se estudió cómo poblarlas en
tiempo de diseño y en semanas posteriores se verá cómo poblarlas desde una base de datos.

48
ESTE DOCUMENTO CONTIENE LA SEMANA 3

REFERENCIAS
Microsoft (2016a). TabControl (Clase). Recuperado de: https://msdn.microsoft.com/es-

es/library/system.windows.forms.tabcontrol(v=vs.110).aspx

Microsoft (2016b). TabPage (Clase). Recuperado de: https://msdn.microsoft.com/es-

es/library/system.windows.forms.tabpage(v=vs.110).aspx

Microsoft (2016c). ListBox (Clase). Recuperado de: https://msdn.microsoft.com/es-

es/library/system.windows.forms.listbox(v=vs.110).aspx

Microsoft (2016d). ComboBox (Clase). Recuperado de: https://msdn.microsoft.com/es-

es/library/system.windows.forms.combobox(v=vs.110).aspx

Microsoft (2016e). Ensamblados. Recuperado de: https://msdn.microsoft.com/es-

es/library/30azhh5b(v=vs.90).aspx

Microsoft (2016f). Cómo: crear y utilizar ensamblados. Recuperado de:

https://msdn.microsoft.com/es-es/library/bk5xe2kk(v=vs.90).aspx

Microsoft (2016g). Cómo: agregar o quitar referencias en Visual Studio (Visual Basic). Recuperado

de: https://msdn.microsoft.com/es-es/library/wkze6zky(v=vs.90).aspx

PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE:

IACC (2016). Aplicaciones MDI. Programación .NET - II. Semana 3.

49
ESTE DOCUMENTO CONTIENE LA SEMANA 3

50
ESTE DOCUMENTO CONTIENE LA SEMANA 3

Potrebbero piacerti anche