Está en la página 1de 8

4 Estructuras Condicionales.

Control Lista, Forms


4.1 Estructuras de Control. Sentencia condicional IF
Cuando la ejecucin de un bloque de cdigo no es lineal, sino que dependiendo de una condicin se tiene que ejecutar un fragmento u otro de cdigo, utilizamos la sentencia de control IF. Su sintaxis es
IF CONDICION THEN

SENTENCIAS A EJECUTAR SI LA CONDICIN SE CUMPLE ELSE SENTENCIAS A EJECUTAR SI LA CONDICIN NO SE CUMPLE END IF

Cuando se desean evaluar varias condiciones se puede hacer as:


IF CONDICION1 THEN

SENTENCIAS A EJECUTAR SI LA CONDICIN1 SE CUMPLE ELSEIF CONDICION2 THEN

SENTENCIAS A EJECUTAR SI LA CONDICIN2 SE CUMPLE ELSE SENTENCIAS A EJECUTAR SI NO SE CUMPLEN END IF

En la condicin se pueden evaluar expresiones utilizando operadores lgicos y relacionales. Para analizar si se cumplen 2 condiciones a la vez utilizamos el AND (Y), para ver si se cumple cualquiera de las dos el OR (O). Luego usamos: MAYOR O MENOR O MAYOR MENOR IGUAL DISTINTO IGUAL IGUAL

>

<

>=

<=

<>

Creamos un proyecto nuevo llamado NOTAS para probar esto. Ponemos una etiqueta, un cuadro de texto y un botn. Al cuadro de texto le llamamos txt__nota. As:

Si hacemos doble-clic sobre evaluar y escribimos lo siguiente:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nota As Double nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") Else MessageBox.Show("Aprobado", "Resultado") End If End Sub

Si queremos que nos distinga entre Notable, Sobresaliente, etc Podemos hacer algo as:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim nota As Double nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") ElseIf nota < 7 Then MessageBox.Show("Aprobado", "Resultado") ElseIf nota < 9 Then MessageBox.Show("Notable", "Resultado") Else MessageBox.Show("Sobresaliente", "Resultado") End If End Sub

Se podran aadir condiciones para analizar los casos fuera de rango. Si no escribimos nada en el cuadro de texto de la nota se produce un error en la conversin a nmero. Para corregirlo aadimos la funcin Length que devuelve la longitud de lo que nos escriban en el cuadro de texto. Si no escriben nada no ser mayor que cero. Quedara:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Compara la longitud Dim nota As Double de la nota If txt_nota.Text.Length > 0 Then nota = CDbl(txt_nota.Text) If nota < 5 Then MessageBox.Show("Suspenso", "Resultado") ElseIf nota < 7 Then MessageBox.Show("Aprobado", "Resultado") ElseIf nota < 9 Then MessageBox.Show("Notable", "Resultado") Else MessageBox.Show("Sobresaliente", "Resultado") End If Else MessageBox.Show("Escriba una nota", "Resultado") End If End Sub

4.2 Estructuras de Control. Seleccin mltiple Select Case


Cuando necesitamos distinguir varias condiciones puede que sea ms apropiada esta estructura que el uso de varios IFs. Luego al realizar el programa cada uno tiene que decidir qu estructura encaja mejor para resolver cada problema. La sintaxis es la siguiente:
SELECT CASE VARIABLE
CASE V1 SENTENCIAS A REALIZAR SI LA VARIABLE VALE V1 CASE V2 TO V3 SENTENCIAS SI LA VARIABLE VALE ENTRE V2 y V3 AMBOS INCLUIDOS CASE V4, V5 SENTENCIAS SI LA VARIABLE VALE ENTRE V4 o V5 CASE IS >V6 SENTENCIAS SI LA VARIABLE ES MAYOR QUE V6 CASE ELSE SENTENCIAS SI LA VARIABLE ES DISTINTA DE LOS ANTERIORES END SELECT

Se pueden utilizar varias expresiones para un mismo caso separndolas por comas. La lnea siguiente sera vlida. Case 1 to 3, 5 to 7, 9, 15, Is >=21 Vamos a hacer la prueba. Creamos un proyecto nuevo y le damos nombre DIASSEMANA. Colocamos en el formulario una etiqueta, un cuadro de Texto y un botn dentro de una caja de grupo. Al cuadro de texto le ponemos como nombre txt_dia. Quedar:

Ahora asignamos el cdigo al botn Evaluar. Haremos doble-clic sobre l y vamos a escribir lo siguiente:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dia As Integer If txt_dia.Text.Length > 0 Then If IsNumeric(txt_dia.Text) Then dia = CInt(txt_dia.Text) Select Case dia Case 1 MessageBox.Show("Lunes, buen comienzo de semnana", "Hoy es") Case 2 To 5 MessageBox.Show("Martes a Viernes", "Hoy es") Case 6, 7 MessageBox.Show("Sabado o Domingo", "Hoy es") Case Else MessageBox.Show("No es un dia de la Semana", "Hoy es") End Select Else MessageBox.Show("Escribe un nmero del 1 al 7", "No es un numero") End If Else MessageBox.Show("Escribe un nmero del 1 al 7", "No se ha escrito nada") End If End Sub

Si observamos el cdigo a parte de comprobar que se haya escrito algo en el cuadro de texto mediante la propiedad Length, usamos otro if para que no nos d error si escribimos en el cuadro de texto una palabra en lugar de un nmero. Guardamos el proyecto y lo cerramos.

4.3 Mas Controles: Control Lista (ListBox), uso de varios Forms.


Si necesitamos mostrar en pantalla un conjunto de valores podemos utilizar el control Lista(ListBox). Vamos a crear un proyecto nuevo con nombre LISTAS para ilustrar el funcionamiento de este control. Colocamos los controles segn esta distribucin:

Como se ve, hemos usado dos cuadros de Grupo para organizar los controles. El cuadro de texto recibe el nombre de txt_nombre y la lista (ListBox) que colocamos en la parte derecha se llamar lst_listado. Una vez realizado el diseo que quiero que presentos los controles que necesitamos en el Formulario, pasamos a aadir el cdigo. Empezamos con el botn Agregar. Hacemos doble-clic sobre l y escribimos el fragmento de cdigo siguiente:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Aadimos el nombre Dim nombre As String If txt_nombre.Text.Length > 0 Then como elemento de la nombre = txt_nombre.Text lista. lst_listado.Items.Add(nombre) txt_nombre.Text = "" Else MessageBox.Show("Escriba un nombre antes de dar al botn", "Geoprocesado") End If End Sub

Lo que hacemos es comprobar que nos escriban algo en el cuadro de texto, si no es as mostramos un mensaje advirtindolo. Luego paso el contenido del cuadro a la variable nombre, aado la variable a la lista y pongo en el cuadro de texto el valor , sea la cadena vaca para que borre el nombre del cuadro despus de haberlo aadido. Vamos con el botn Borrar Lista. Le asociamos el siguiente cdigo:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click lst_listado.Items.Clear() End Sub

Esa lnea se encarga de borrar el contenido de la lista. Como vemos hay otros mtodos asociados al Listbox y a Items. Se podra intentar completar el programa utilizando alguno ms de ellos. Queremos ahora que si se selecciona un elemento en la lista en la derecha, ese elemento aparezca en el cuadro de texto de la izquierda. Vamos a asociar el cdigo a la lista. Hacemos doble-clic sobre la lista y escribimos lo siguiente:
Private Sub lst_listado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lst_listado.SelectedIndexChanged txt_nombre.Text = lst_listado.SelectedItem End Sub

En lo primero que nos fijamos es que el procedimiento que nos crea en la lista maneja el evento SelectedIndexChanged, es decir se asocia a cambiar el elemento seleccionado de la lista, frente al evento hacer clic que nos asociaba para los botones. Lo nico que le indicamos es que coloque en el cuadro de texto el valor del elemento que se seleccione en la lista. Si quisisemos modificar el evento que queremos que nos asocie a un botn o a un control en general, podemos seleccionar el evento que necesitemos en la parte superior de la ventana cuando estamos en una de las lneas del procedimiento al que le quiero asociar el manejador de evento distinto. En la imagen siguiente vemos los eventos que aparecen cuando desplegamos los manejadores disponibles para la lista.

Para terminar con el ejercicio intentaremos crear un segundo formulario. Aadimos un formulario nuevo al proyecto actual desde el men Proyecto/Agregar Windows Forms.

Nos aparece un dilogo con algunas plantillas de formularios preparados:

Seleccionamos Cuadro Acerca de, ponemos como nombre frm_acerca y pulsamos el botn Agregar. Nos aparece el nuevo formulario. Es el formulario habitual de la mayora de aplicaciones en la que nos informa sobre la misma, versin, compaa, etc. Nosotros vamos a cambiar solo el texto que vemos asociado a las etiquetas para que se vea as:

Ahora queremos utilizar este formulario creando una instancia desde el Formulario principal. Volvemos al formulario Principal haciendo doble-clic sobre la ficha Form1.vb[Diseo] o haciendo doble-clic sobre Form1.vb en el Exploracin de Soluciones. Hacemos doble-clic sobre el botn Acerca de que habamos aadido antes al formulario y escribimos el siguiente cdigo:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim ayuda As New frm_acerca ayuda.Show() End Sub

Hay que destacar que el formulario frm_acerca que hemos creado es una clase. Para crear una instancia de la clase es necesario escribir Dim ayuda As New frm_acerca, a diferencia de la declaracin de las variables de tipos valor. Luego slo llamamos al mtodo Show del formulario. Si ejecutamos el programa comprobamos como al abrir el formulario Acerca lo hace sin crear dependencia del principal. Si pulsamos en el otro formulario nos deja cambiar a l. En las aplicaciones normales, en ocasiones necesitamos utilizar dilogos. Mientras se estn realizando cambios en el dilogo no se permite utilizar las opciones del programa principal. Vamos a cerrar los formularios para volver a seguir probando cosas. Volvemos al cdigo asociado al botn Acerca de, y ahora escribimos:
ayuda.ShowDialog()

En la lnea en la que antes pona ayuda.Show(). De este modo nos muestra el formulario en formato Modal. Intentamos pulsar en el principal durante la ejecucin despus de mostrar el formulario Acerca. Cerramos el Programa. Si vamos al formulario frm_acerca y pulsamos doble-clic sobre el botn Aceptar vemos el cdigo que ha escrito el programa para ese botn.
Me.Close()

Me hace referencia al objeto actual, en este caso al formulario frm_acerca, con close() le indicamos que lo cierre. En la parte superior de la ventana del cdigo observamos que hay otra funcin asociada a la carga del formulario Handles MyBase.Load es la que se encarga de actualizar las etiquetas segn los valores que figuran en las propiedades del proyecto. Dejamos para vosotros la opcin de eliminar la funcin y dejar las etiquetas estticas, o modificar esos parmetros. Guardamos el proyecto, y lo cerramos.

También podría gustarte