Anda di halaman 1dari 44

Programar con Visual Basic

Por: Ariel Palazzesi @ viernes, 09 de mayo de 2008 Nota vista 5687 veces

Si alguna vez has sentido deseos de crear tus propios programas, estas de parabienes: en NeoTeo te ensearemos, paso a paso, como crear programas utilizando una de las herramientas mas sencillas y potentes que puedes conseguir: Visual Basic. Comenzamos

Fig ra !: comenzando la descarga"

! pesar de lo ampliamente di"undido que se encuentra Visual Basic en todas sus versiones, hasta no hace mucho hab#a que gastar un buen mont$n de dinero para hacerse con una copia de esta magni"ica herramienta. Sin embargo, Microsoft ha decidido distribuir versiones gratuitas de algunos de sus lengua%es de programaci$n m&s populares. Se trata de copias totalmente operativas, aunque con algunas limitaciones. Visual Basic 2005 Express es la versi$n gratis que utilizaremos en este tutorial. 'ara acceder a ella, lo primero que debes hacer es descargar e instalar el paquete correspondiente. Se trata de una descarga de apro(imadamente )*+,-, que puedes conseguir en el sitio o"icial que ,icroso"t ha puesto en l#nea para este producto. .eamos como instalarlo. 'or supuesto, haremos clic sobre /versi$n "inal en espaol0, lo que har& que nuestro navegador nos pregunte si deseamos guardar o e%ecutar el programa al que lleva dicho lin1. Seleccionaremos /e%ecutar0, y esperaremos unos segundos. 'rimero aparecer& un cuadro como el de la "igura 2, indic&ndonos que esperemos, y luego algo parecido a lo siguiente:

Fig ra 2

Fig ra #

Fig ra $: %& e vamos a descargar'

3n la ventana de la "igura 4 marcaremos 5o no6 la casilla que nos permite enviar un feedback a la gente de -ill 7ates para que siga me%orando el producto, y en la segunda aceptaremos las condiciones estipuladas en la licencia. 8na vez que la hayamos le#do de punta a punta, ya podemos marcar la casilla que indica nuestra con"ormidad, y darle al bot$n siguiente para continuar. 9a siguiente decisi$n que debemos tomar 5:igura ;6 se re"iere a si vamos a descargar solamente Visual Basic 2005 Express, o si tambi<n queremos instalar una versi$n reducida del Microsoft SQL Server 2005. No hay demasiada di"erencia de tiempo entre descargarla o no, as# que no es mala idea hacernos con una copia de ella. !l "in y al cabo, no seria raro que en alg=n momento queramos escribir alg=n programa que haga uso de una base de datos. !l hacer clic en el bot$n /siguiente0, veremos la pantalla de la "igura >, en la que podremos elegir la carpeta en que se instalar& el paquete, y cuanto espacio necesitaremos. ?emos optado por mantener la que nos sugiri$ el so"t@are de instalaci$n. !l darle a /siguiente0 otra vez, estamos listos para comenzar con la descarga del resto del paquete 5:igura A6.

Fig ra 5: %(onde instalar el )a* ete'

Fig ra 6: +omienza la descarga"

3ste es un buen momento para ordenar un poco la habitaci$n, o para salir a por un poco de aire. Bependiendo de la velocidad de nuestra cone(i$n, el proceso puede demorar entre ;+ minutos y un par de horas. No es mala idea cerrar las dem&s aplicaciones que est<n haciendo uso de Cnternet, para acelerar un poco esta etapa. Tarde o temprano el proceso "inaliza, y nos invita a reiniciar el ordenador. 8na vez hecho esto, el programa esta listo para ser usado. D eso es lo que haremos.

IDE son las iniciales, en ingles, de Integrated Development Environment, algo asi como entorno e esarrollo integra o. Se trata de un programa que nos pone a disposici$n las herramientas que necesitamos para programar en un 5o en varios6 lengua%es de programaci$n. 3n el caso del Visual Basic 2005 Express, lo primero que vemos es la imagen de la "igura E, de donde podemos elegir si vamos a encarar un proyecto nuevo o editar uno e(istente. Supongamos que vamos a traba%ar en un nuevo proyecto. Si seleccionamos esa alternativa, una ventana como la de la "igura * nos mostrar& las opciones con las que contamos a la hora de decidir el car&cter que tendr& nuestro desarrollo. Son algunos menos que las disponibles en la versi$n completa del .isual Studio, pero no est&n nada mal para ser gratis. Comenzaremos viendo como se construye un programa /normal0 para Findo@s. 'ara ello, hacemos dos veces clic sobre el primer icono, el de la leyenda /!plicaci$n para Findo@s0. !parecer& algo parecido a lo de la "igura G.

:igura *: Hue construiremos

tipo

de

aplicaci$n:igura G: 3l CB3, a pleno.

!qu# debemos hacer una aclaraci$n. Bebe haber pocos programas que brinden la posibilidad de personalizaci$n de sus barras de herramientas como este CB3. Seria muy conveniente que no cambies de lugar las barras, cuadros o botones por ahora, para que la disposici$n se parezca lo m&s posible a las capturas de pantalla que o"recemos como muestra. 3so har& m&s "&cil de seguir las e(plicaciones. ?emos marcado la barra que contiene las opciones del men= principal con un /20 5en ro%o, no puedes no verlo6. Besde all# es posible acceder a casi todas las opciones del .isual -asic 4++> 3(press, que iremos viendo a medida que resulten necesarias. 8n /40 seala la "ila de iconos que representan las tareas que utilizaremos con mayor "recuencia. Si alguna vez utilizaste alguno de los integrantes del paquete ,icroso"t I""ice, ya sabes como se utilizan estos iconos. 3n /)0 tenemos el /3(plorador de soluciones0, que es b&sicamente una lista de cada parte que compone nuestro proyecto, y que proporciona una "orma r&pida de llegar a cada uno de ellos. 9a zona marcada con un /;0 muestra 5y nos permite modi"icar6 las propiedades del ob%eto o control que hayamos seleccionado en ese momento. Ser& una de las zonas que mas emplearemos del CB3.

3n />0 vemos el /"ormulario0 que contendr& los elementos que con"orman nuestra aplicaci$n. 3n el momento que el programa que estamos creando este listo, ser& la ventana que lo contenga. !ll# depositaremos los botones, menues, etiquetas, y todo lo que necesite nuestra aplicaci$n para llevar a cabo su tarea. 'or ultimo, /A0 muestra el /Cuadro de herramientas0. 3ste men=, que se divide en varias zonas, ser& el que proporcione todos los controles que necesitamos para completar nuestra aplicaci$n. 9a "orma de colocar alguno de ellos sobre el /"ormulario0 es tan sencilla como /arrastrarlo0 sobre este. 9a "igura 22 muestra como hemos colocado un bot$n. 9o hemos marcado con un c#rculo ro%o, y tambi<n hemos puesto otro para que veas de qu< "orma se modi"ico el contenido de la zona /;0, para re"le%ar la lista de las propiedades que este bot$n tiene. 9a "igura 24 muestra el mismo "ormulario, al que hemos agregado una serie de controles di"erentes.

:igura 2+: Nuestro primer control.

:igura 22: "ormulario.

!gregamos

m&s

items

al

'uedes comenzar con la instalaci$n del paquete, y e(plorar las herramientas de las que dispone el CB3. Tienes )+ d#as para registrar 5gratuitamente6 tu paquete en el sitio Feb de ,icroso"t. 8na vez hecho esto, tendr&s acceso a una serie de tutoriales y publicaciones que har&n m&s "&cil tu aprendiza%e. Nosotros seguiremos e(plicando como hacer uso de Visual Basic 2005 Express en la pr$(ima entrega de este tutorial.

,entana con las )ro)iedades de Form!" -es lta .astante com)licado elegir n orden determinado al intentar e/)licar na 0erramienta como ,is al 1t dio 2/)ress 2005" Nosotros vamos a seg ir n camino )oco ortodo/o, tomando ata3os y tratando temas .astante distintos entre si, )ero * e nos )ermitir4n crear )e* e5as a)licaciones desde el )rimer d6a" +omo 0a.6amos mencionado, el 7marco8 encargado de contener a n estra a)licaci9n ser4 el 7:orm lario8" + ando arrancamos el ,is al 1t dio y elegimos crear na a)licaci9n )ara ;indo<s, a tom4ticamente el =(2 nos )ro)orciona n :orm lario con el nom.re 7Form!8" 2ste :orm lario tiene na serie de )ro)iedades * e ) eden modi:icarse :4cilmente: .asta con editar el valor * e a)arece a la derec0a de s nom.re" As mimos * e el lector tiene a dis)osici9n la ay da * e .rinda >1(N ?i.rary, * e se instala 3 nto a ,is al 1t dio 2/)ress, )ara cons ltar los detalles de cada )ro)iedad" 1olo e/)licaremos las * e vayan siendo necesarias )ara entender los e3em)los * e vayamos )lanteando" @na de las )ro)iedades * e )rimero cam.iamos de n :orm lario es 7Ae/t8" 2l te/to * e contiene este cam)o es el * e a)arecer4 como tit lo de n estra ventana" 2n la :ig ra sig iente ) ede verse como 0emos 0ec0o * e n estro :orm lario lleve como tit lo la :rase 7NeoAeo B ,is al Casic8:

Demos cam.iado el tit lo de n estro :orm lario" 2n ,is al Casic tam.iEn ) eden cam.iarse el valor de estas )ro)iedades mediante 9rdenes incl idas en el )rograma" Por e3em)lo, )odemos tilizar

>e"Ae/t F GNeoAeo H ,is al CasicG )ara lograr el mismo res ltado" 7>e8 es el :orm lario act al, en este caso re)resenta a Form!" 1iem)re * e el c9digo * e escri.imos este dentro del mismo :orm lario, nos re:erimos a El como 7>e8" ? ego del 7"8 viene el nom.re de la )ro)iedad * e * eremos cam.iar, en este caso 7Ae/t8" I )or ltimo, des) Es del ig al y entre comillas J)or ser na cadena de te/toK, 7NeoAeo B ,is al Casic8, * e es el tit lo * e * eremos )ara n estra ventana" 2l res ltado ) ede verse a contin aci9n:

Demos ingresado c9digo ,C" ?a :orma de escri.ir el c9digo es m y :4cil: .asta con 0acer n clic en la sola)a * e lleva el nom.re del :orm lario Jen este caso 7Form!"v.8K" 2l =(2 a tom4ticamente escri.e )or nosotros los enca.ezados de los )rocedimientos, )or lo * e solo escri.imos n estro c9digo"

(esde a* i accedemos al codigo de los controles" Alg nas )ro)iedades solo ace)tan valores de verdadero o :also" 2n esos casos, al 0acer clic a la derec0a del nom.re de la )ro)iedad, se a.re n menL con am.as alternativas" Por e3em)lo 7?ocMed8, * e indica si n estro :orm lario )odr4 o no ser cam.iado de tama5o mediante el )rocedimiento normal de arrastrar con el rat9n s s .ordes, ) ede ser con:ig rado como 7Ar e8 J,erdaderoK o 7False8 JFalsoK:

(esde a* i elegimos el valor deseado" Ntra )ro)iedad * e )osi.lemente * ieras cam.iar es 7=con8" 1i 0aces clic so.re ella, se a.rir4 n c adro de dialogo * e te )ermite elegir el arc0ivo 7"=+N8 * e desees sea el icono * e se m estre en la es* ina s )erior de la ventana:

2ste c adro de dialogo )ermite seleccionar el icono del Form! Al ig al * e m c0as otras caracteristicas, el tama5o del :orm lario tam.iEn ) ede ser cam.iado mediante la modi:icaci9n de s s )ro)iedades" I esto ) ede 0acerse desde el c9digo" Castar4 con agregar >e"1ize";idt0 F anc0o deseado Jen )i/elesK N >e"1ize"Deig0t F alt ra deseada Jen )i/elesK donde lo necesitemos" 2sto es m y til, ya * e nos )rorciona n mecanismo dinamico )ara el cam.io de los atri. tos del :orm lario en tiem)o de e3ec cion" P edes )ro.ar agregando >e"1ize";idt0 F $80 Jdonde $80 es el anc0o deseadoK y ver * e oc rre al correr el )rograma" 1i deseas conocer todos los atri. tos * e ) edes modi:icar de los :orm larios JOson m c0osPK dale n vistazo a la ay da" A0ora veremos alg nos de los controles dis)oni.les"

!ontroles 8na de las primeras impresiones que se tiene al entrar al CB3 de Visual Stu io Express 2005 es que hay controles que no utilizaremos nunca. Sin embargo, con el tiempo vamos viendo que todos son =tiles en alg=n momento, y a"ortunadamente ,icroso"t los ha puesto a disposici$n. 9os controles simplemente se arrastran con el rat$n desde la paleta que est& a la izquierda de la pantalla hasta el "ormulario. .amos a probar como hacerlo. Cntenta arrastrar ) botones 5Button6, una etiqueta 5Label6, ) casillas 5CheckBoxes6 y un cuadro de te(to 5TextBox6. No importa demasiado 5por ahora6 su posici$n sobre el "ormulario, aunque si pones un poco de cuidad, podr&s colocarlos tal como se ven en la imagen:

!gregamos los controles al :orm2 8na vez hecho esto, vamos a cambiarles a todos estos controles el te(to que muestran. 9os vamos seleccionando de a uno, utilizando el rat$n, y modi"icamos en la ventana propiedades el valor de la propiedad Text. Toma tu tiempo, y haz que tus controles queden tal como se ve aqu#:

9os controles han sido modi"icados.

:&cil, verdad -ien, hemos cambiado el nombre que muestran, aunque los controles todav#a tienen nombres tan poco amigables como Button o CheckBox!. 'or ahora los de%aremos as#, pero es bueno que sepas que el nombre tambi<n es una propiedad que se puede cambiar. Si bien no hace al aspecto de nuestro programa, el uso de nombres descriptivos para los controles que usamos en nuestra aplicaci$n har& m&s "&cil la con"ecci$n del programa. .amos a ver como hacer para que los controles que hemos agregado e%ecuten alguna tarea cuando el usuario interact=a con ellos. 9a "orma de hacer esto es, simplemente, escribir el c$digo necesario en el evento deseado. Como siempre, un e%emplo puede resultar mucho m&s simple de entender. ?agamos que cuando presionamos el tercer bot$n 5el que tiene el te(to /Salir06 el programa termine. 3n -!SCC, la instrucci$n que "inaliza la e%ecuci$n de un programa es /3nd0. 'ara escribir esta instrucci$n en el evento Click del -utton) simplemente le damos doble clic, y el CB3 nos posicionar& en el lugar correcto. 8na vez editado, este deber#a ser el aspecto del c$digo:

?ay que escribir el c$digo necesario en el evento deseado.

9a "lecha indica el lugar donde debemos escribir End. Como ves, el entorno del .isual -asic ha escrito el encabezado del procedimiento por si solo. 8na vez hecho esto, veremos que si corremos el programa, al hacer /clic0 sobre el bot$n /Salir0, el programa termina. 9os dem&s, al no tener c$digo asociado, no e"ect=an ninguna tarea.

Tenemos dos botones mas para /programar0. !provechemos para ver como las acciones que se llevan a cabo sobre un control pueden in"luir en otro. .amos a darle doble clic al bot$n /3scribir0 para acceder a su evento /clic0, y escribir all# el c$digo necesario para que el Te(t-o(2 5el pequeo cuadro de te(to de la parte superior del "ormulario6 muestre el te(to /"ola mundo#0 cuando lo presionamos. 3l c$digo deber#a quedar as#:

.olvemos a agregar c$digo. Si e%ecutamos el programa, veremos que el cuadro de te(to aparece vacio. !l hacer clic sobre /3scribir0, su contenido cambia a /?ola mundoJ0. 9o que hemos hecho ha sido modi"icar el evento /clic10 del -utton2 para que modi"ique la propiedad /Te(t0 del control Te(t-o(2. Kesulta bastante m&s di"#cil describir el proceso que llevarlo a cabo. 3l contenido del Te(t-o(2 puede ser modi"icado utilizando el rat$n y el teclado, editando o copiando su contenido. 'ero tambi<n podr#amos modi"icarlo mediante c$digo. Be la misma manera que programamos el comportamiento del primer bot$n, podemos modi"icar el segundo para que al presionarlo limpie el contenido del cuadro de te(to. 9os pasos son los mismos, pero la cadena asignada a Te(t-o(2.Te(t debe estar vac#a:

9a cadena asignada a Te(t-o(2.Te(t debe estar vac#a. L9istoJ !hora podemos escribir con un bot$n, borrar con el otro, y salir con el tercero. D lo me%or de todo es que hemos escrito muy poco c$digo para lograrlo. !"ec#Boxes Con todo lo visto hasta aqu#, no deber#a resultarnos muy di"#cil hacer que, si el usuario marca alguno de las casillas del "ormulario, se modi"ique el contenido del cuadro de te(to. 3n realidad, el procedimiento es el mismo que hemos empleado para modi"icar el comportamiento de los primeros dos botones: le damos doble clic al Chec1-o( que

queremos editar, y escribimos el codigo necesario. 'or e%emplo, en la "igura siguiente vemos como hacer para que el al marcar el Chec1-o(2 el Te(t-o(2 muestre la palabra /Ko%o0:

3scribimos el codigo necesario. Si e%ecutamos el programa y e"ectivamente seleccionamos /Ko%o0, el resultado ser& el siguiente:

Todo parece "uncionar correctamente. Da puedes modi"icar por ti mismo los otros tres para que escriban /.erde0, /!marillo0 y /!zul0. Tambi<n puedes comprobar que el bot$n /-orrar0 sigue borrando el contenido del Te(t-o(2, y que el bot$n /3scribir0 escribe /?ola mundoJ0 independientemente del contenido del cuadro de te(to. 3l c$digo completo deber#a verse as#:

,odi"icamos los otros tres controles. 'or supuesto, el programa tiene un de"ecto: 3l TextBox escribe lo que le pedimos al hacer clic, independientemente de que estemos marcando o desmarcando el CheckBox correspondiente. 'or supuesto, no es un problema de .isual -asic 5que hace e(actamente lo que le hemos indicado6, sino de nuestro c$digo, que no tiene en cuenta esta situaci$n. 3n entregas siguientes, cuando conozcamos las instrucciones necesarias para la toma de decisiones, veremos como podemos me%orar nuestro pequeo programa de e%emplo. 'or hoy hemos terminado. Seria interesante que, mientras preparamos la pr$(ima entrega, realices muchas pruebas con los controles que hemos visto, y si te surgen inquietudes, las plantees como comentarios en este articulo. 'rometemos responder a todas las consultas. Sentencias para el control el programa 3ste grupo de instrucciones pueden modi"icar el orden en que se e%ecutan las dem&s sentencias que componen nuestro programa. -&sicamente, e(isten dos grupos de instrucciones que pueden llevar a cabo estas tareas: las que determinan la e%ecuci$n de un trozo de c$digo tomando una decisi$n, y las que permiten repetir un grupo de sentencias un n=mero determinado de veces. Comenzaremos analizando las del primer grupo. Sentencias e ecisi$n 8na instrucci$n de este tipo representa una divisi$n en el "lu%o normal del programa. ! partir del punto del c$digo en que escribimos una instrucci$n de este tipo se produce una /divisi$n0 en dos o mas alternativas. Bel resultado de la evaluaci$n de una condici$n 5que "orma parte de la sentencia de decisi$n6 depender& cual de las alternativas es la que "inalmente se e%ecuta. Bentro de este grupo veremos las sentencias If, Choose y $elect Case% Comencemos.
2nlaces + rso ,is al CA1=+, )rimera )arte + rso ,is al CA1=+, seg nda )arte

>1(N es na . ena : ente de ay da" OAengamoslo )resenteP

If%&"en 3(isten varias maneras de utilizar esta sentencia. Su "orma m&s simple ocupa solo una l#nea de c$digo, y tiene la "orma siguiente: If condici&n then sentencia ! menudo los programadores se re"ieren a este "ormato como /C" de una l#nea0, y se emplea generalmente para asignar un valor a alguna variable cuando se da una condici$n determinada. .eamos un e%emplo. Supongamos que si la edad de una persona es mayor a 2* aos, debemos guardar en la variable /su%etoMestado0 el valor /adulto0. 9a edad de la persona esta almacenada en la variable /su%etoMedad0. 9a sentencia C" que realiza esta comprobaci$n y 5eventual6 asignaci$n es la siguiente: If su'eto(edad ) * then su'eto(estado + adulto 9a sentencia en cuesti$n, en caso de que la condici$n sea verdadera 5es decir, que la edad del su%eto sea mayor a 2* aos6, e%ecuta la asignaci$n que se encuentra a la derecha del /then0, haciendo que su%etoMestado contenga la cadena /adulto0. D luego continuar& con la sentencia siguiente. 3n caso de que /su%etoMedad0 sea igual o menor a 2*, el programa continuar& con la sentencia siguiente a la del e%emplo sin realizar ninguna asignaci$n. ?ay una variaci$n posible al /C" de una l#nea0, y consiste en el agregado de la cl&usula /else0. Bicha sentencia tiene la siguiente "orma: If condici&n then sentencia else sentencia, 3ste tipo de construcci$n es muy =til cuando, en "unci$n del resultado que arro%e la evaluaci$n de la condici$n deban e%ecutarse uno u otro 5pero no ambos6 grupo de instrucciones.

Nuevamente, un e%emplo nos aclarar& me%or la cuesti$n. Supongamos que queremos asignar a la variable su%etoMestado el valor /adulto0 o /nio0 dependiendo si es mayor o no de 2* aos. Nuestro /C" de una l#nea0 quedar& como sigue: If su'eto(edad ) * then su'eto(estado + adulto else su'eto(estado + ni-o

!l e%ecutar esa l#nea, Visual B'SI! decidir& si la condici$n es o no verdadera, y en "unci$n del resultado e%ecutar& la asignaci$n que se encuentra a la derecha del 0then0 o la que est& despu<s del /else0. Cndependientemente de cual sea el resultado, el programa 5luego de realizar la asignaci$n correspondiente6 seguir& con la l#nea siguiente a la del /i"N0. 'or supuesto, nada de esto sirve cuando necesitamos, luego de evaluar una condici$n, e%ecutar un grupo de instrucciones y no solamente una. 3n esos casos, si el n=mero de instrucciones es pequeo, podemos optar por separarlas por dos puntos: If condici&n then sentencia . sentencia, . sentencia! . /% 3n caso de que la condici$n sea verdadera, se e%ecutar&n todas las sentencias que est&n luego del /then0, en riguroso orden de izquierda a derecha. 3l mismo truco puede emplearse para colocar varias sentencias despu<s del /else0.

'ero a=n as#, hay casos en que esto no basta. .eamos que podemos hacer. 'or e%emplo, no podemos poner otra sentencia /C"N0 a continuaci$n del /then0 o /else0. 'ara estos casos tenemos la /versi$n larga0 del /C"N0, que ocupa todas las l#neas que haga "alta, y que, en la practica, es la que m&s utilizaremos. 3l "ormato de esta alternativa es la siguiente: If condici&n then

sentencia sentencia, sentencia! /% End If 3l "uncionamiento es el mismo que cuando utilizamos los /:0 en la versi$n de una sola linea para separar las sentencias unas de otras, pero se agrega la clausula /3nd C"0 al "inal para que el compilador sepa donde termina el bloque de instrucciones correspondientes al /C"N0 y donde comienzan las que pertenecen al resto del programa. Si realizamos el e%emplo anterior con este "ormato, nos quedar#a: If su'eto(edad ) * then su'eto(estado + adulto End If !hora ya sabes por que, cada vez que pueden, los programadores eligen el /C" de una l#nea0. 'ero donde realmente se luce es en los casos que el c$digo a e%ecutar es mas e(tenso, ya que no solo permite un numero 5te$ricamente6 in"inito de sentencias de todo tipo en su interior, si no que es mucho m&s legible que el /C" de una l#nea0 con sentencias separadas por /:0. D por supuesto, puede usarse con el /3lse0: If condici&n then $entencia(v $entencia(v, $entencia(v! /% Else $entencia(f $entencia(f, $entencia(f! /% End If 'ero lo m&s interesante es que pueden /anidarse0 sentencias condicionales, unas dentro de otras. 3so permite la toma de decisiones realmente comple%as. D si somos ordenados 5comentando e indentando el c$digo a conciencia6, el programa seguir& siendo legible a pesar de la longitud que pueda tener. .eamos un e%emplo. Supongamos que tenemos una variable, llamada /su%etoMse(o0, cuyo valor puede ser /?0 o /,0 5por /?ombre0o /,u%er06, y otra llamada /su%etoMedad0 que contiene 5Lcomo noJ6 la edad del su%eto. 3l siguiente c$digo:

If su'eto(sexo + " then 0$i el su'eto es "12B3E If su'eto(edad ) * then 04 tiene m5s de * a-os/ su'eto + 6ar&n ma7or de edad Else 0$i no/% $u'eto + 6ar&n menor de edad End If Else 0$i el su'eto es 289E3 If su'eto(edad ) * then 04 tiene m5s de * a-os/ su'eto + 2u'er ma7or de edad Else 0$i no/% $u'eto + 2u'er menor de edad End If End If

coloca en la variable /su%eto0 una descripci$n de la persona basada en los datos conocidos. 'uede verse en que "orma se han /anidado0 un C" dentro de otro. 9a indentaci$n del c$digo permite identi"icar "&cilmente cada parte del programa.

9os Oi"O pueden anidarse.

II( 'ara terminar con el capitulo dedicado a esta indispensable instrucci$n, aprenderemos a utilizar el /C"N0 como "unci$n. 3"ectivamente, es posible utilizar esta sentencia como si "uese una "unci$n. 9uego de ser evaluada la condici$n, devuelve en la variable el valor que se encuentra despu<s de la primer /,0 5condici$n verdadera6 o el que se encuentra despu<s de la segunda 5condici$n "alsa6. 9a "orma es la siguiente: 6ariable + II:;condici&n< valor < valor,= 3sta puede ser una herramienta interesante, y en muchos casos puede reemplazar al /C" de una l#nea0. .eamos uno de los e%emplos anteriores, aquel en que la variable su%etoMestado adquiere el valor /adulto0 o /nio0 dependiendo si es mayor o no de 2* aos, /traducido0 a este nuevo "ormato: su'eto(estado + II: ; su'eto(edad ) *< adulto< ni-o= Como puede verse, una vez comprendida la sinta(is puede ser una buena "orma de escribir un c$digo claro. 'ero no terminan aqu# las venta%as del C::. Tambi<n puede "ormar parte de otras sentencias, como el :IKNN3PT. !=n a riesgo de adelantarnos, veamos como podr#amos hacer un bucle que cuente hasta 4+ o hasta >+ dependiendo del valor de una variable:

:or i + /% /% /% @ext i

to I::;variable + < ,>< ?>=

C::: otra "orma de hacer lo mismo. Si /variable0 es 2, el bucle se e%ecutar& 4+ veces. Caso contrario, se e%ecutar& >+. 3l c$digo equivalente, de no e(istir el C:: podr#a escribirse as#: If variable + then :or i + to ,> /% /% /% @ext i Else :or i + to ?> /% /% /% @ext i End If I asi: If variable + then limite + ,> else limite + ?> :or i + to limite /% /% /% @ext i

Como puede verse, la "orma mas corta de todas es la que emplea el C::. !onclusi$n ?emos aprendido como hacer que nuestro programa pueda /tomar decisiones0 utilizando algunas de las varias "ormas que posee la sentencia /i"Nthen0. ! medida que vayamos

escribiendo nuestros propios programas seremos capaces de determinar r&pidamente cual es la m&s conveniente en cada ocasi$n. 3n breve veremos c$mo se emplean las restantes.

?ay muy pocos programas que no usen OC"..thenO.

Con esto terminamos este cap#tulo de nuestro pequeo curso de programaci$n. 9a semana pr$(ima comenzaremos con las sentencias capaces de hacer que una porci$n de nuestro c$digo se repita la cantidad de veces que necesitemos. ,ientras tanto, intenta aplicar lo aprendido para "i%ar los conceptos. L?asta la pr$(imaJ Seguimos avanzando en la comprensi$n de esta "ant&stica herramienta. Continuaremos analizando en pro"undidad las sentencias destinadas a controlar el "lu%o del programa, y proporcionando e%emplos que sirvan para su me%or entendimiento. 3n esta oportunidad, e(plicaremos como sacar provecho a !"oose)* y Select !ase.

Aam.iEn ) edes )rogramar 3 egos en ,C2005"

Como hemos visto, e(iste un grupo de instrucciones que tienen la capacidad de modi"icar el orden en que se e%ecutan las dem&s sentencias de nuestro programa. 3n la entrega anterior aprendimos a utilizar /C"NThen0, la instrucci$n de este tipo que se utiliza con mayor "recuencia. ?oy veremos las dos restantes: !"oose)* y Select !ase. !"oose)* 3sta "unci$n recibe una lista de par&metros, de los cuales el primero se utiliza como #ndice para determinar cual de los dem&s se devuelve al ser evaluada. 3sto puede parecer di"#cil de entender, pero en realidad, como demostraremos con los e%emplos, es muy simple. 3l "ormato de Choose56 es el siguiente: 6ariable + Choose ;indice< valor < valor < valor < valor </%< valor@= !l e%ecutarse esta sentencia, /.ariable20 tomar& alguno de los valores de la serie /.alor20 a /.alorN0. 3l contenido de la variable /indice0 ser& el que determine cual resulta elegido: si /indice0 es igual a 2, !"oose)* har& que /.ariable20 tome el valor de /.alor20Q si /indice0 es igual a 4 tomar& el de /.alor40Q y as# sucesivamente. 'ero un e%emplo nos ayudara a=n m&s a comprender el "uncionamiento de Choose56: supongamos que tenemos que elegir un color de una lista, donde el valor 2 est& asignado al color ro%o, el 4 al verde y el ) al azul. D queremos que la variable /.ariable20 almacene la palabra /ro%o0, /verde0 o /azul0 en "unci$n del valor de la variable /color0. 8sando Choose56, se har#a de la siguiente "orma: variable + Choose;color< Aro'oA< AverdeA< AaBulA=

2l contenido de la varia.le GindiceG determinar4 la res) esta"

Si hubi<semos querido hacer lo mismo utilizando /If/Then0, el programa ser#a mucho mas e(tenso 5y quiz&s m&s con"uso6: Dim variable Cs $tring Dim color Cs Integer color + , If color + Then variable + Aro'oA Else If color + , Then variable + AverdeA Else Dasumo Eue si color no es

ni ,< es !%

variable + AaBulA End If End If

(istinto )rograma, mismo res ltado"

8n plugin permite programar para -lac1-erry. 3sta instrucci$n es ideal para utilizar en aquellas situaciones en que debemos elegir una alternativa de entre muchas. Si bien !"oose)* hace mas o menos esto mismo 5/C"NThen0 tambi<n6, por lo general /Select !ase0 resulta m&s "&cil de leer. 'articularmente, yo pre"iero utilizar /Choose560 cuando quiero que el c$digo 5"uente6 sea compacto, y /Select Case0 cuando hay muchas alternativas, pero cada programador eli%e la "orma que cree m&s conveniente. Su "ormato es el siguiente: $elect Case Fexpresi&n a evaluar) Case Flista de expresiones ) DInstrucciones a e'ecutar Case Flista de expresiones,) DInstrucciones a e'ecutar Case Flista de expresiones!) DInstrucciones a e'ecutar Case Flista de expresiones@) DInstrucciones a e'ecutar Case Else

DInstrucciones a e'ecutar si no se cumple D ninguna de las listas de expresiones anteriores End $elect 9a Fexpresi&n a evaluar) puede ser algo tan simple como una variable, o una e(presi$n m&s comple%a que Visual Basic resolver& antes de elegir que grupo de instrucciones e%ecutar. 9as Flista de expresiones) que siguen a cada sentencia /Case0 se eval=an, y de ser verdaderas 5solo deber#a serlo una de ellas6 se e%ecutan las sentencias que est<n a continuaci$n. 3n caso de que ninguna de las Flista de expresiones) sea verdadera, se e%ecutan las instrucciones que est&n a continuaci$n del /Case Else0. 3sta secci$n no es obligatoria. Si no e(iste /Case Else0 y ninguna de las Flista de expresiones) es verdadera, el programa no e%ecutar& nada de lo que hay dentro de la estructura. .eamos c$mo podr#amos resolver el e%emplo de los colores visto antes, usando Select Case:

$elect Case color Case variable + Aro'oA Case , variable + AverdeA Case ! variable + AaBulA End $elect

Seleccionando colores con Select Case. Si quisi<semos que, cuando /color0 tiene un valor distinto de 2, 4 o ) /.ariable20 "uese igual a la palabra /3rror0, podemos agregar la secci$n /Case 3lse0: $elect Case color Case variable + Aro'oA Case , variable + AverdeA Case ! variable + AaBulA Case Else

variable + AErrorA End $elect Kespecto de las e(presiones que pueden utilizarse a continuaci$n de las cl&usulas /Case0, no tiene por que ser necesariamente un numero. Supongamos que queremos que si /color0 vale 2,4 o ), /.ariable20 sea igual a /Correcto0. No necesitamos usar tres /Case0 di"erentes, sino que podemos hacerlo en uno solo, separando los valores por comas. Huedar#a as#: Select Case color Case 2,4,) variable2 R OCorrectoO Case 3lse variable2 R O3rrorO 3nd Select

Siempre podemos agregar la secci$n /Case 3lse0.

3n estos casos, donde queremos hacer lo mismo para un grupo de valores comprendidos en un rango determinado, tambi<n podemos utilizar la cl&usula /To0. 3l siguiente c$digo hace e(actamente lo mismo que el visto reci<n: $elect Case color Case To ! variable + ACorrectoA Case Else variable + AErrorA End $elect Kesulta evidente que su la lista de valores es larga, /To0 simpli"ica mucho el c$digo.

Tambi<n podemos utilizar la cl&usula /To0. 3n todos los e%emplos vistos, hemos e"ectuado alguna acci$n cuando el valor de Fexpresi&n a evaluar) es igual a un valor determinado. 'ero puede darse el caso de que necesitemos hacer algo cuando la Fexpresi&n a evaluar) sea mayor, menor o di"erente a un valor determinado. 'ara ello, debemos utilizar el operador /Is0. 9iteralmente, el signi"icado, en espaol, de este operador es /3s0. Su uso brinda una gran "le(ibilidad a la Fexpresi&n a evaluar). .eamos un e%emplo:

$elect Case numero Case Is F variable + AGrimera decenaA Case Else variable + Ama7or de >A End $elect 3l c$digo anterior guardar& en /.ariable20 el te(to O'rimera decenaO solo cuando el valor de /numero0 sea menor a 22 5es decir, este comprendido entre + y 2+6.

3l signi"icado, en espaol, de este operador es /3s0. 'ara terminar con /Select !ase0, vamos a resolver un problema utilizando todo lo visto hasta aqu#.

Supongamos por un momento que en un variable tenemos la edad de una persona, y que debemos, en "unci$n de su valor, determinar que en que tipo de establecimiento educativo se encuentra cursando sus estudios 5por supuesto, los valores y tipos de establecimientos son completamente "icticios6. ,ira el c$digo "uente siguiente e intenta comprender que hace cada l#nea: Dim variable Cs $tring Dim edad Cs Integer edad + ,> $elect Case edad Case >< < , variable + A@o escolariBadoA Case !< H< ? variable + AGreescolarA Case I To , variable + AEscuelaA Case ! To * variable + AColegioA Case J To ,? variable + A8niversidadA Case Is ) ,? variable + A@o escolariBadoA Case Else variable + AK@o puede tener menos de CE31 a-os#A End $elect Seguramente podr&s descubrir, leyendo el programa, cual es el valor de /.ariable20 una vez e%ecutado el c$digo anterior, verdad

Cntenta comprender que hace cada l#nea.

3s muy di"#cil encontrar un proceso de datos que requiera de alg=n tipo de repetici$n. Si solo tuvi<semos que llevar a cabo una acci$n determinada en dos o tres oportunidades, podr#amos limitarnos a repetir el c$digo en cuesti$n la cantidad necesaria de veces. 3sto "uncionaria, a pesar de que a un programador / serio0 le producir#a dolor de estomago. 'ero si necesitamos e"ectuar un proceso sobre, digamos, un mill$n de registros, la soluci$n anterior, adem&s de ser muy poco e"icaz, es absolutamente impracticable. 'ara resolver estas situaciones, los lengua%es de programaci$n proporcionan una serie de instrucciones destinadas a la repetici$n de porciones de c$digo. Si bien todas ellas hacen b&sicamente lo mismo, tienen sutiles di"erencias que hacen, "rente a un determinado problema, unas mas apropiadas que otras. (+,-.E/& 3sta quiz&s sea la estructura de este tipo mas conocida. Be hecho, se encuentra presente en los ialectos B'SI! desde los or#genes de este lengua%e. Su "ormato es el siguiente: :or variable + valor(inicial To valor(final $tep incremento Instrucciones @ext variable donde /variable0 ir& cambiando su valor a lo largo de la e%ecuci$n del bucle :orSNe(t, comenzando con /valorMinicial0 hasta /valorM"inal0, en incrementos de /incremento0. 'or cada valor que asuma /variable0, la5s6 instrucci$n5es6 que se encuentran entre el :or y el Ne(t se e%ecutar&n una vez. Con"uso Seguramente el e%emplo siguiente te aclarar& las cosas. Supongamos que queremos sumar los n=meros enteros de 2 a 2+ 5ambos inclusive6. 8sando :orSNe(t podr#amos hacerlo as#: Dim i< suma Cs Integer suma + > :or i + To > $tep suma + suma L i @ext i 3n primer lugar, declaramos la variable /i0, que ser& la que controlara el bucle, y la variable /suma0 5guardar& el total de la suma6 como enteras. 9uego, hacemos que suma sea igual a cero. 3sto no es indispensable, por que el compilador la inicializa por de"ecto con ese valor, pero es recomendable tener a la vista ese dato. 9uego, tenemos el bucle "orSNe(t propiamente dicho. .emos que /i0 adoptar& valores desde 2 hasta 2+, increment&ndose en 2 cada iteraci$n. 9a sentencia /suma R suma T i0 se e%ecutar& 2+ veces, sumando cada vez el valor de /i0 en la variable suma. /i0 tomar& valores 2, 4, ), ;, >, A, E, *, G y 2+, mientras que /suma0 ser& 2, ), A, 2+, 2>, 42, 4*, )A, ;> y >>.

Nuestro primer :orSNe(t. Colocar el nombre de la /variable0 a continuaci$n del Ne(t es opcional. 'ero a pesar de no ser obligatorio, es una buena pr&ctica hacerlo, ya que en aquellos programas en que se emplean varios bucles, uno dentro de otro, ayuda a identi"icar a que :or corresponde cada Ne(t. Cuando el incremento de la /variable0 es 2, como en el e%emplo anterior, tampoco hace "alta poner /Step 20, ya que el compilador lo hace por de"ecto. Bigamos que si queremos escribir lo menos posible, nuestro e%emplo podr#a quedar como sigue: Dim i< suma Cs Integer :or i + @ext 3n programas tan sencillos, podemos omitir todas estas cuestiones que son opcionales. 'ero si nuestro programa es muy e(tenso, o si debe ser modi"icado o le#do por otra persona, conviene incluir todo lo necesario para que su comprensi$n sea m&s "&cil. 9a declaraci$n del tipo de la /variable0 puede hacerse dentro del mismo /:or0, lo que compacta un poco m&s el c$digo: Bim suma !s Cnteger :or i Cs Integer + To > suma + suma L i @ext 'ersonalmente, me gusta <sta "orma de declarar la variable usada en el bucle. To > suma + suma L i

9a declaraci$n de la variable puede hacerse dentro del mismo /:or0

Tambi<n puede ser =til construir bucles que modi"iquen el valor de la /variable0 de "orma decreciente. 3sto es posible gracias a que el valor a continuaci$n del Step puede ser negativo. Si se da esta condici$n, el valor de la /variable0 se decrementa en cada iteraci$n. .eamos un e%emplo: Dim suma Cs Integer :or i Cs Integer + >> To > $tep M, suma + suma L i @ext 3n este caso, el valor inicial de /i0 ser& 2++, ira descendiendo de a dos unidades en cada iteraci$n, y la =ltima se producir& cuando el valor de /i0 sea igual a cero. 9a variable /suma0 va incrementando su valor en cada pasada, y al "inalizar contiene la suma de los n=meros pares que se encuentran entre el + y el 2++, ambos inclusive. 'uedes comprobarlo, el resultado "inal de /suma0 ser& 4>>+.

?a )r e.a: el res ltado :inal de 7s ma8 es 2550"

'or supuesto, en ese caso el /valorMinicial0 debe ser mayor que el /valorM"inal0, si no nuestro bucle no se e%ecutar& ni una vez. 3sto plantea un tema interesante: puede darse el caso de que un bucle no se e%ecute ninguna vez, ya que sus valores iniciales son tales que lo hacen imposible. 9a situaci$n se produce cuando, al principio del bucle, .isual -asic

eval=a los valores de /variable0, /valorMinicial0,/valorM"inal0 e /incremento0 y descubre que se ha alcanzado el m&(imo valor posible, saltando a la instrucci$n que sigue al Ne(t. 'or e%emplo, el siguiente c$digo no realiza ninguna suma, ya que el valor inicial es in"erior al "inal, y el incremento es negativo: Dim suma Cs Integer :or i Cs Integer + To > $tep M, suma + suma L i @ext

2ste c9digo no realiza ning na s ma"

Nada impide utilizar valores no enteros en cualquiera de los par&metros del :orSNe(t. Supongamos que, siguiendo con las sumas, queremos sumar los valores comprendidos entre + y 2+, de +.2 en +.2: Dim suma< i Cs Double :or i + > To > $tep >% suma + suma L i @ext 5n$tese el detalle de que hemos declarado las variables como /Bouble06. 3l c$digo anterior sumar& +.+, +.2, +.4, etc hasta 2+.+ . 3l resultado, como se ve en la imagen siguiente es >+>.

+9digo y res ltado de la e3ec ci9n"

'or supuesto, todos los par&metros de un :orSNe(t pueden ser variables. 3sto le otorga una gran "le(ibilidad a nuestros programas, ya que permite construir bucles cuyo numero de e%ecuciones dependa, por e%emplo, del numero de productos que contiene una base de datos, o de los d#as que tiene el mes en curso. 3l e%emplo siguiente ilustra esta posibilidad: Dim suma< i< inicio< final< incremento Cs Double inicio + *?%N final + >>%* incremento + >% :or i + inicio To final $tep incremento suma + suma L i @ext i 'or supuesto, como di%imos antes, si no se es cuidadoso se puede terminar con un bucle que no se e%ecute ni una vez. Bato curioso: el resultado, que deber#a ser 2;.2E; tiene un pequeo error de redondeo.

ON)sP @n error de redondeo"

'or ultimo, hay un par de instrucciones que pueden alterar el n=mero de veces que se va a repetir el contenido de un bucle :orSNe(t. Supongamos que queremos sumar los n=meros enteros hasta que la suma sea superior a 2+++. Salvo que seamos muy buenos con la matem&tica, no tenemos "orma de conocer cual ser& el /valorM"inal0 de nuestra cuenta. 'ero con /3(it :or0 podemos abortar el :orSNe(t cuando queramos. Si .isual -!SCC se encuentra con esta instrucci$n, inmediatamente pasa a la instrucci$n posterior al Ne(t, sin importar que se haya alcanzado el /valorM"inal0 elegido o no. !s# es como se usa: Dim suma< i< inicio< final< incremento Cs Double inicio + final + >>> incremento + :or i + inicio To final $tep incremento suma + suma L i If suma )+ >>> Then Exit :or End If @ext i 8sando el C:ST?3N que vimos en una entrega anterior, preguntamos si la suma ya es igual o superior a 2+++. 3n caso de que sea as#, e%ecutamos el 3(it :or para abandonar el bucle. 3n la imagen siguiente puede verse el resultado del programa, y tambi<n que /i0 s$lo ha necesitado incrementarse )> veces.

2/it For en acci9n"

:orSNe(t tiene una variante que permite recorrer los #tems de una colecci$n, mediante :orS 3ach. Cuando hayamos visto que son y c$mo se emplean las colecciones, volveremos sobre :orSNe(t para e(plicar este =ltimo aspecto. Con esto terminamos la quinta entrega de nuestro tutorial. 3n la siguiente veremos los dem&s tipos de bucles que podemos emplear en nuestros programas Visual B'SI!. 3n la quinta entrega de este pequeo tutorial, vimos que con (+,%.E/& pod#amos resolver aquellas situaciones en las que un grupo de instrucciones deb#an repetirse un n=mero determinado de veces. 'ero e(isten otras situaciones, y aparecen con mucha "recuencia, en las que no se conoce de antemano el n=mero de iteraciones que deber#a tener nuestro bucle. ! pesar de que un programador con e(periencia siempre encontrar& la "orma de a"rontar esas situaciones haciendo uso de :IKNN3PT, resulta mas "&cil, apropiado y e"iciente emplear las instrucciones que el repertorio sentencias de Visual Basic pone a nuestra disposici$n. .eamos cuales son. Do%Loop 3l bucle BI...9II' es muy vers&til. Tanto, que puede reemplazar a :IKNN3PT en casi todos los casos. Con <l se pueden crear una gran variedad de bucles di"erentes, dependiendo si comprueban una condici$n antes de e%ecutar el bucle una vezQ despuOs de la primera e%ecuci$nQ mientras que se cumple la condici$n o hasta Eue la mencionada condici$n se cumpla. 9a sinta(is b&sica de esta estructura es la siguiente: Bo CnstruccionesN U3(it BoV CnstruccionesN 9oop 3sta es la "orma m&s simple de escribir este tipo de bucle. 9as instrucciones comprendidas entre el Do y el Loop se e%ecutaran inde"inidamente. Kesulta muy apropiado para aquellos casos en que nuestro programa se encuentra esperando que ocurra alguna situaci$n determinada, a la vez que repite un grupo de instrucciones. 9a opci$n /Exit Do0 permite abandonar el bucle cuando lo deseemos. 3n general, una sentencia /C"NThen0 comprueba el valor de alguna e(presi$n, y cuando dicha e(presi$n es verdadera, se e%ecuta el /3(it Bo0. 3l siguiente e%emplo ilustra este caso: Bim edad !s Cnteger edad R 4+ Bo edad R edad S 2 C" edad R + Then 3(it Bo 3nd C" 9oop Como puede verse, el bucle se repetir& mientras que el valor de /edad0 sea di"erente de cero. Cuando esto ocurre, la condici$n que eval=a el /C"NThen0 ser& verdadera y el control del programa saltar& a la instrucci$n que haya a continuaci$n del /9oop0.

?a o)ci9n 72/it (o8 )ermite a.andonar el . cle c ando lo deseemos"

9a segunda "orma en que se puede escribir un bucle /BoN9oop0 es la que sigue: Bo W Fhile X 8ntil Y condici$n CnstruccionesN U3(it BoV CnstruccionesN 9oop 'or supuesto, no podemos utilizar 01"ile2 y 03ntil2 a la vez. 3n esta "orma del bucle, la condici$n se eval=a al comienzo del mismo. 3n el caso de utilizar la opci$n /Fhile0, el bucle se repetir& mientras que la condici$n sea verdadera. 'odemos escribir el e%emplo anterior utilizando esta posibilidad: Bo Fhile edad Z[ + edad R edad S 2 9oop Como puede verse, es mucho m&s simple utilizar /Fhile0 que /C"NThen0 y /3(it Bo0. !claramos que la condici$n eval=a que edad sea di"erente de cero. Tambi<n podr#amos haber resuelto el problema con el uso de /8ntil0: Bo 8ntil edad R + edad R edad S 2 9oop 3n este caso, el bucle se repetir& hasta que edad sea igual a cero. 3n estos dos ultimo e%emplos puede darse el caso de que, si edad es igual a cero cuando se llega a la instrucci$n /Bo0, las instrucciones e(istentes en el interior del bucle no se e%ecuten nunca.

2l . cle se re)etir4 0asta * e edad sea ig al a cero"

9a tercera "orma que puede adoptar el bucle que estamos analizando es la siguiente: Bo CnstruccionesN U3(it BoV CnstruccionesN 9oop W Fhile X 8ntil Y condici$n Como puede verse, se ha delegado la capacidad de evaluar la condici$n al "inal del bucle. 3sto tiene la particularidad de permitir que el grupo de instrucciones e(istentes en el interior del bucle se e%ecuten al menos una vez, independientemente de que la condici$n a evaluar sea o no verdadera. Nuestro e%emplo podr#a resolverse as#: Bim edad !s Cnteger edad R 4+ Bo edad R edad S 2 9oop 8ntil edad R + I asi: Bim edad !s Cnteger edad R 4+ Bo edad R edad S 2 9oop Fhile edad Z[ +

1e ) ede eval ar la condici9n al :inal del . cle"

3n todos los casos puede utilizarse, entre las instrucciones que est&n dentro del bucle, la sentencia /Continue Bo0, que hace que el control del programa salte nuevamente al /BoN0, repitiendo el ciclo actual. .eamos ahora como utilizar /1"ile%En 0 Si comprendiste la "orma en que "unciona el bucle O Do% LoopO con la opci$n /Fhile0, no tendr&s ninguna di"icultad en aprender a usar /1"ile%En 0. /FhileN3nd0 tiene la siguiente estructura: Fhile condici$n CnstruccionesN U3(it FhileV CnstruccionesN UContinue FhileV CnstruccionesN 3nd Fhile 9o primero que notamos es que en este bucle tambi<n e(iste la posibilidad de abandonarlo en cualquier momento, gracias a /3(it Fhile0Q y que, al igual que antes, la sentencia /Continue Fhile0 3ste es el tipo de bucle que debemos usar si deseamos repetir un con%unto de instrucciones un n=mero inde"inido de veces. 3sto ocurrir& mientras la condici$n sea verdadera. 3s menos "le(ible que /Bo...9oop0, pero a muchas personas les resulta m&s sencillo de utilizar.

No tendr4s ning na di:ic ltad en a)render a sar 7;0ileQ2nd8"

Su "uncionamiento es el siguiente: si la condici$n es verdadera, se e%ecutan todas las instrucciones hasta que se encuentra la instrucci$n /3nd Fhile0. 9uego, el control vuelve a la instrucci$n /Fhile0 y se comprueba de nuevo la condici$n. 3sto se repite hasta que la condici$n evaluada resulte "alsa, en cuyo caso el control pasa a la instrucci$n que sigue a la instrucci$n /3nd Fhile0. 'ara poder compararla con las otras opciones vistas, vamos a escribir el c$digo de los e%emplos anteriores utilizando /FhileN3nd0: Bim edad !s Cnteger edad R 4+ Fhile edad Z[ + edad R edad S 2 3nd Fhile Como puede verse, resulta muy simple de usar. 'ara terminar, tengamos presente que si se desea repetir las instrucciones un n=mero "i%o de veces, la instrucci$n /:or...Ne(t0 siempre es la me%or opci$n. 4o&o 3sta instrucci$n es la /ove'a negra0 de todos los dialectos B'SI!, aunque tambi<n e(iste en otros lengua%es de programaci$n. Su "unci$n consiste en trans"erir, sin condiciones, la e%ecuci$n del programa a otro punto del mismo, identi"icado por una etiEueta 5o n=mero de l#nea6 determinada. 3n realidad, en la /prehistoria0 de la programaci$n, en la <poca en que los lengua%es de programaci$n eran muy primitivos, la mayor#a de los bucles se constru#an con /7oTo0. Be esta "orma se lo utiliza en Visual Basic: CnstruccionesN 7oto etiqueta CnstruccionesN 3tiqueta: CnstruccionesN

Cuando el programa se encuentra con /7oTo etiqueta0, salta a la instrucci$n siguiente a /3tiqueta:0. /3tiqueta:0 puede estar antes o despu<s del /7oTo0, lo que permite hacer /saltos hacia atr&s0 o /saltos hacia adelante0. Tampoco hay l#mite entre la cantidad de instrucciones que pueden escribirse entre el /7oTo0 y la /etiqueta:0.

72ti* eta:8 ) ede estar antes o des) Es del 7RoAo8"

3sta /libertad0 que otorga hace que muchos programadores, en general los principiantes, hagan un uso abusivo del /7oTo0, y sus programas sean muy di"#ciles de comprender. !dem&s, es posible escribir cualquier programa sin necesidad de siquiera un solo /7o To0. 'ara terminar este capitulo, realizaremos el e%emplo de antes, pero con /7oTo0: Bim edad !s Cnteger edad R 4+ repetir: edad R edad S 2 C" edad [ + Then 7oTo repetir 3nd C" Como puede verse, y a pesar de su poca longitud, el c$digo resulta algo mas con"uso que los otros e%emplos. 3n programas largos, de miles de instrucciones, con varios /7oTo0 saltando de un lado para otro, el seguimiento del programa puede convertirse en una pesadilla, incluso para la misma persona que lo escribi$. Con esto, damos por "inalizada esta entrega del tutorial de programaci$n en .isual -asic. Bentro de unos d#as publicaremos el cap#tulo siguiente.

9os controles, que pueden arrastrarse y soltarse sobre los "ormularios 5:orms6 de Visual Basic, son componentes e(tremadamente importantes para la construcci$n de las aplicaciones. Son, en resumen, los que permiten con"eccionar la inter"az que el usuario utilizara para controlar las "unciones de nuestro programa. 'roveen mecanismos para proporcionar in"ormaci$n al usuario 5Label< ToolTip< GictureBox< Tree6ieP, etc.6, organizar los datos para que sean "&cilmente interpretados 5QroupBox< TabControl< Ganel< etc.6, ingresar datos 5TextBox< ComboBox< 2onthCalendar< etc.6, seleccionar una5s6 opcion5es6 de entre varias 5ListBox< CheckBox< 3adioButton< etc.6 o interactuar con elementos que no pertenecen, necesariamente, a nuestra aplicaci$n 51pen:ileDialog< $ave:ileDialog< GrintDocument, etc.6. !dem&s, algunos controles especiales nos proporcionan herramientas para mane%ar o complementar otros controles 5ImageList< ToolTip< etc.6 No veremos absolutamente todos los disponibles, pero la in"ormaci$n que proporcionaremos en esta entrega y las dos o tres siguientes bastar& para que el lector pueda sacar provecho de todos los controles que posee Visual Basic. 3sta es la paleta de controles disponibles:

:igura 2 Comenzaremos viendo como utilizar los /Controles comunes0. 3s bastante di"#cil encontrar alguna aplicaci$n que no utilice alguno de estos controles como parte de su interfa5. 3l primero de ellos, cuyo icono es una pequea "lecha, no es en realidad un control, sino la herramienta que podemos usar para mover o seleccionar alguno de los controles que tenemos en nuestro "ormulario. ?echa esta aclaraci$n, comencemos con el an&lisis. 9o primero que haremos ser& abrir el Microsoft Visual Basic 2005 Express, seleccionemos /Cplicaci&n para RindoPs0, y

asegur<monos que tenemos el :orm en la pantalla, en modo diseo. Beber#amos tener a la vista algo m&s o menos as#:

:igura 4

:igura ) 3l primer control que usaremos ser& 0Button2. Como habr&s adivinado, se trata del cl&sico 6ot$n presente en pr&cticamente la totalidad de las ventanas de cada programa. 3ste control puede e%ecutar una acci$n cuando el usuario hace clic sobre <l. 8tilizando la "lecha, arrastraremos uno hasta el "ormulario :orm . No importa demasiado, al menos por ahora, en que posici$n lo coloquemos, ni tampoco su tamao. 3s m&s, puede ser un buen momento para que pases unos minutos /%ugando0 con la "lecha y el control, para asegurarte que comprendes de qu< "orma puedes arrastrarlo por el "ormulario o cambiar su tamao. 8na vez colocado el control, el "ormulario se ver& como sigue:

:igura ; 9o primero que vamos a aprender es como cambiarle el nombre, ya que 0Button72 di"#cilmente sea apropiado para nuestra aplicaci$n. .amos a modi"icar el bot$n para que termine la aplicaci$n cuando le hacemos clic, as# que un nombre apropiado para el ser#a 0Salir2. Bebemos, como se ve en la imagen, utilizar el cuadro Gropiedades para cambiar el valor correspondiente al atributo Text del control. Simplemente, hacemos clic sobre ese rengl$n, y escribimos /Salir0 5o lo que queramos poner6. Beber#a quedar como la "igura de la derecha.

:igura >

:igura A

Con esto tenemos el bot$n con el te(to deseado escrito en <l. !hora, vemos como hacer para que, cuando el usuario haga clic sobre el control, la aplicaci$n termine. 'ara ello, debemos escribir un trozo de c$digo que se e%ecute cuando esta acci$n tenga lugar. 9a "orma de hacerlo es muy sencilla: simplemente, damos un doble clic sobre el bot$n, y Visual Basic pasar& al (orm8v6, tal como se ve en la "igura:

:igura E 3l IDE de Visual Basic nos "acilita mucho las cosas. Tanto, que como puede verse nos lleva directamente al lugar e(acto donde debemos escribir el c$digo que se e%ecutar&, en tiempo de e%ecuci$n, al pulsar el bot$n. Como queremos que la aplicaci$n termine cuando esto ocurra, simplemente escribimos End:

:igura * 8na vez hecho esto, ya podemos probar nuestro programa para ver si "unciona correctamente. 'ara ello, basta con presionar /(50 o hacer clic sobre la "lecha verde de la barra de herramientas que tenemos en la parte superior del CB3, deba%o del men=. 3l programa arrancar&, y se ver& m&s o menos como sigue:

:igura G

Ibviamente, ya habr&s hecho clic sobre el bot$n y comprobado c$mo se cierra la ventana. 'or supuesto, podemos hacer cosas mucho m&s interesantes con este control. !provecharemos, de paso, para aprender a utilizar la "unci$n MsgBox)*, que permite desplegar pequeas ventanas con un mensa%e 5y algunos botones6 en ella. Su sinta(is es la siguiente: 2sgBox;promptS< buttonsTS< titleTS< helpfile< contextT= Bonde prompt, que obligatoriamente debe estar, es una cadena que representa el te(to que aparecer& en el cuadro de di&logo. 9a longitud m&(ima de prompt es de unos 2+4; caracteres, variando con el ancho de los caracteres utilizados. Buttons es un par&metro opcional. 3s una e(presi$n num<rica que corresponde a la suma de los valores que especi"ican el n=mero y el tipo de los botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del bot$n predeterminado y la modalidad del cuadro de mensa%es. Si no ponemos nada 5o ponemos /+06, solo aparecer& un bot$n con el te(to /I10 que cerrar& el cuadro de dialogo cuando le demos clic. Title es otra cadena opcional, que se muestra en la barra de t#tulo del cuadro de di&logo. Si se omite este par&metro, en la barra de t#tulo se ver& el nombre de la aplicaci$n. 9elpfile tambi<n es opcional. 3s la cadena que identi"ica el archivo de ayuda relacionado con el cuadro de dialogo. .olveremos sobre este tema cuando tratemos la "orma de implementar ayuda interactiva en nuestras aplicaciones. 3l par&metro context tambi<n se relaciona con la ayuda. .eamos un e%emplo. 9a siguiente l#nea 2sgBox;ACprendiendo 6isual BasicA< >< A@eoTeoA= genera un cuadro de di&logo con el te(to OCprendiendo 6isual BasicO, un solo bot$n con el te(to /1k0 y el titulo /@eoTeo0. Tal cual se ve en la imagen:

:igura 2+ !hora bien, seguramente te est&s preguntando /UC&mo hago 7o para enterarme Eue poner para crear cada combinaci&n de botonesV0. D nosotros, r&pidamente, te damos la respuesta:

Tabla 2 Como puede verse, Visual Basic proporciona una palabra clave para que no tengamos que recordar n=meros e(traos. 3l siguiente c$digo

2sgBox;AError grave< se ha perdido la informaci&nA<6bCbort3etr7Ignore L 6bCritical<AError graveA=

,uestra c$mo podemos utilizarlas. D la "igura de aba%o el resultado que produce:

:igura 22

Tabla 4 9o interesante de MsgBox)* es que devuelve un c$digo que nos indica que bot$n ha pulsado el usuario. 3sto signi"ica que, si somos lo su"icientemente h&biles a la hora de escribir nuestros programas, podremos realizar di"erentes acciones en respuesta a la respuesta 5Kops#6 del usuario. 3l siguiente c$digo muestra un aviso de alerta con los botones Cnular, 3eintentar y 1mitir. 9uego, utilizando la instrucci$n If-&"en, el programa analiza la respuesta del usuario y muestra otro cuadro de di&logo que nos con"irma cual "ue el bot$n presionado:

Dim a Cs Integer a + 2sgBox;AError grave< se ha perdido la informaci&nA< vbCbort3etr7Ignore L vbCritical< AError graveA= If a + vbCbort Then 2sgBox;AGresionaste CnularA= End If If a + vb3etr7 Then 2sgBox;AGresionaste 3eintentarA= End If If a + vbIgnore Then 2sgBox;AGresionaste 1mitirA=

End If

:igura 24

:igura 2)

Como puede verse, resulta muy simple utilizar los controles disponibles en Visual Basic. ?oy no hemos visto m&s que una peque#sima parte de las opciones de uno de sus controles, pero a"ortunadamente, la mayor parte de las caracter#sticas y propiedades de un control e(isten y se utilizan de la misma "orma en casi todos los dem&s. 3sto "acilitar& mucho nuestro aprendiza%e.

Anda mungkin juga menyukai