Apunte Visual Basic 3
Apunte Visual Basic 3
Propiedades
Multiline, Scrollbars, Maxlenght,
TextAlign, BorderStyle, Enabled, Visible.
INSTRUCCIÓN PEDIR CON VISUAL BASIC. LOS TEXTBOX.
La forma de pedir datos con Visual Basic resultará un tanto distinta a la que se utiliza cuando se
trabaja con pseudocódigo puro o lenguajes estructurados como C. Una petición de datos no
necesitará ser dispuesta en el código, sino que se obtendrá a través de un objeto prefabricado:
un TextBox. Vamos a aprender a utilizarlo.
Un TextBox es un control que principalmente utilizamos para que el usuario introduzca datos,
pero también puede mostrar una respuesta predeterminada o incluso servir para mostrar en vez
de para pedir datos.
Un TextBox tiene una serie de propiedades, como puedes ver pulsando sobre el Textbox y
recorriendo la lista que te aparece en la ventana Propiedades (si no tienes activada esta ventana,
actívala). Prueba por ejemplo a cambiar el color de fondo (Backcolor). El mensaje inicial que
aparecerá sobre el TextBox cuando comience el programa también es una propiedad: la
propiedad Text. Prueba a cambiar esta propiedad (puedes tanto escribir un texto como dejar
vacío el TextBox). Comprobarás que si escribes un contenido y pulsas enter, cuando ejecutas
dicho texto aparece dentro del TextBox sobre el formulario. Te bastará con establecer Text vacío
para que no haya ningún mensaje inicial cuando ejecutes el programa.
Muchas propiedades pueden establecerse en tiempo de diseño (cuando diseñamos el formulario)
o en tiempo de ejecución (contenidos del código que se realizan cuando ejecutamos el
programa). Escribe como texto para el TextBox en el diseño del formulario el texto "Text1".
Escribe el siguiente código:
Option Explicit On
Option Explicit Public Class Form1
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs)
Text1.Text = "" Handles MyBase.Load
Text1.BackColor = vbGreen TextBox1.Text = "" TextBox1.BackColor
End Sub = Color.Green
End Sub End
Class
El resultado es que el TextBox se muestra vacío y con color de fondo verde. El mostrarse vacío se
debe a que hemos indicado que cuando se cargue el formulario la propiedad Text del control (un
elemento como un TextBox se denomina “control”) se establezca a cadena vacía (""). En
versiones menos recientes de Visual Basic incluso se permitía escribir simplemente Text1 = "", ya
que se consideraba que si no se especificaba propiedad era para referirnos a la propiedad Text.
En las versiones más recientes es obligatorio indicar siempre la propiedad a modificar.
Sólo citaremos algunas constantes que juzgamos interesantes. Una de ellas es vbCrLf,
una constante que supone una indicación de salto de línea y retorno de carro.
Cuando se introduce esta constante, equivale a una pulsación de enter. Su
equivalente usando código ASCII es Chr(13) + Chr(10). Es decir, podemos escribir
tanto una cosa como otra, resultando equivalentes. El interés de las constantes es
que suelen resultar más sencillas de usar que su escritura con otro tipo de código.
Prueba estos códigos y comprobarás que hacen lo mismo:
a) Caso 1
MsgBox ("22 salones" & vbCrLf & "4321 camarotes")
b)Caso 2
MsgBox ("22 salones" & Chr(13) & Chr(10) & "4321 camarotes")
En la ventana Propiedades puedes modificar la denominación del control (Text1 ó TextBox1) por
otra denominación. Supón que en ese cuadro de texto se espera que el usuario introduzca una
altura. Podemos establecer la propiedad Name como Textaltura. Así, podríamos escribir por
ejemplo Textaltura.BackColor = vbGreen ó Textaltura.BackColor = Color.Green. También
podríamos llamar al TextBox simplemente altura y escribir altura.BackColor = … , aunque este
tipo de denominaciones son poco recomendables porque son menos claras. Conviene siempre
respetar al menos un texto inicial que nos permita saber que esa denominación corresponde a un
TextBox, ya que en caso contrario puede ser muy difícil de leer un programa. Por ejemplo, si
vamos a pedir 4 datos que son nombre de edificio, longitud, anchura y altura podemos nombrar
los TextBox como TextNomEdificio, TextLongitud, TextAnchura y TextAltura. Un mismo prefijo
nos identifica todos los controles que son del tipo TextBox. Las normas para nombrar objetos
deben seguir razonamientos similares a lo que hemos descrito para variables, tendentes a ser lo
más claros y explicativos posibles.
Para terminar esta visión rápida de lo que son los TextBox, citaremos algunas propiedades que
nos parecen interesantes:
Trata de modificar los valores de estas propiedades y observa los resultados. Haz lo mismo
actuando en el código en vez de en el diseño del formulario. Podrás comprobar que existen
muchas más propiedades además de las que hemos citado. Prueba a modificar algunas de ellas
para comprender qué es lo que controlan.
En Visual Basic una petición de datos al usuario no necesitará ser dispuesta en el código, sino que
se obtendrá a través de un objeto prefabricado: un TextBox. Con frecuencia el dato que
queremos obtener será un valor numérico, mientras que sin embargo el contenido de los
TextBox es tipo texto. Por ello deberemos realizar una conversión. La función Val nos permite
obtener el contenido de un TextBox en formato numérico (Integer, Single, Double, etc.).
El contenido que introduce un usuario a través de un TextBox tiene carácter de texto. Para
convertir un número en formato texto a una variable numérica se usa la función Val. La sintaxis a
emplear es:
Variable = Val(Cadena)
Ejemplo:
Dim A As Single
A = Val(TextBox1.Text)
Supone que la variable A, que ha sido definida como tipo Single, adopta el contenido numérico
del TextBox denominado TextBox1.
La función Val deja de leer la cadena en el primer carácter que no puede reconocer como parte
de un número. Los espacios en blanco, los tabuladores y los avances de línea se eliminan.
Val(" 38205 (Distrito Norte)") devuelve 38205 como valor numérico. Los espacios en blanco se
eliminan, y el resto de cadena a partir de donde no se puede reconocer un valor numérico se
ignora. Si la cadena empieza con un contenido no numérico Val devuelve cero. Por ejemplo Val ("
(Distrito Norte) 38205 " devuelve cero.
La función Val sólo reconoce el punto (.) como separador decimal válido (aunque esto puede
verse afectado por la configuración regional de tu ordenador). Cuando se usa un separador
decimal diferente, debe realizarse un tratamiento previo de la cadena o utilizarse una función de
conversión de tipos como CSng ó CDbl para convertir la cadena a un número.
Otra forma muy relevante de pedir datos con Visual Basic consiste en el uso de
ventanas de petición de datos (Inputbox). Cuando se invoca la función Inputbox,
se despliega una ventana independiente con un mensaje definido de solicitud de
datos al usuario, que dispone de un
Textbox asociado para responder y de botones para aceptar o cancelar. La sintaxis es
donde n es una variable que toma el valor que haya introducido el usuario.
A modo de ejemplo simple para ver el resultado de estas funciones, crea un proyecto y sitúa un
TextBox sobre el formulario. Escribe el pequeño código que indicamos a continuación y
comprueba sus resultados.
Código (versionesVB menos recientes): Código (versiones VB más recientes):
End Sub
End Class
La función Val convierte a cualquier formato numérico, por tanto puede servir para introducir
contenido en variables de tipo Integer, Long, Single, Double, etc.
El contenido que muestra el control se establece a través de la propiedad Text (en las versiones menos
recientes propiedad Caption). Podemos escribir Label1.Text = "Introduzca aquí un entero positivo" (ó
Label1.Caption = "Introduzca aquí un entero positivo" en otras versiones) para obtener ese mensaje
dentro del Label1.
Autosize: si se establece como True, da lugar a que el tamaño del Label se ajuste al texto que muestra.
Si quieres modificar el tamaño de un label en tiempo de diseño y no puedes posiblemente se deba a
que Autosize está establecido como True.
Borderstyle: permite cambiar la apariencia del borde del Label.
Font: permite establecer tipo de letra, su tamaño, propiedades (cursiva, negrita, etc.)
Label1.Text = msg1 & msg2 ó Label1.Caption = msg1 & msg2 (según versión de VB en uso)
daría lugar a que se mostrara el contenido derivado de las variables msg1 y msg2. En las versiones menos
recientes de Visual Basic se consideraba que si se escribiría Label = … nos referíamos al texto que debía
mostrarse dentro del Label. Es decir, se permitía escribir:
Obteniendo el mismo resultado que en el caso anterior. En las versiones más recientes esto ya no se
permite.
Vamos a trasladar el siguiente pseudocódigo a código usando Labels y TextBox:
a) A través del diseño del formulario Insertamos un Label en el formulario. Establecemos la propiedad Text
(en otras versiones Caption) del Label como "Introduzca su peso en kgs por favor". Elegimos la propiedad
Font como tamaño 10 y negrita. Creamos un TextBox llamado Text1 ó TextBox1, situado junto al mensaje.
• A través del código (Recuerda que si escribes código donde citas un objeto como un TextBox, etc. dicho
objeto debes haberlo creado previamente sobre el formulario en ver – objeto, y tienes que invocarlo
respetando su nombre. Igualmente debes prestar atención al tamaño de los objetos para que los
textos no se te corten, a la propiedad Visible, etc.)
Otra forma relevante de mostrar datos (también de pedirlos) es a través de ventanas de mensajes
(MsgBox). Cuando se invoca la función MsgBox se despliega una ventana en la que
se nos muestra un mensaje y una serie de botones a elegir entre Sí, No, Aceptar, Cancelar, Anular, Omitir,
Reintentar...etc. La sintaxis es del tipo MsgBox("Valor no válido") ó Respuesta = MsgBox("¿Desea continuar?",
vbYesNo), donde Respuesta es una variable tipo Integer donde se almacena un número asociado a la respuesta
que ha dado el usuario. Por ejemplo, Respuesta valdrá 1 si el usuario ha elegido aceptar, valdrá 2 si ha elegido
cancelar, valdrá 3 si ha elegido anular, etc.
Valiéndote de la Ayuda prueba a crear distintos MsgBox.
Hay distintos usos posibles de Print. En las versiones menos recientes existía una instrucción Print que
permitía mostrar mensajes sobre un formulario y que es la que vamos a explicar a continuación. Si estás
usando una versión reciente de Visual Basic esta instrucción no está disponible, por lo que puedes saltarte
este apartado y pasar al siguiente. El uso de Print para mostrar mensajes sobre un formulario se basa en la
escritura de texto entrecomillado y variables delimitadas por punto y coma. Ejemplo de este uso sería:
que daría lugar a un resultado del tipo: La respuesta es 32 euros. Utilizar una coma en lugar de un punto y
coma es posible, pero la coma se traduce en la introducción de una tabulación. Así:
da lugar a un resultado del tipo: La respuesta es 32 euros. También es posible usar el símbolo de
concatenación &:
La diferencia respecto a usar puntos y comas estriba en que el punto y coma lleva a una introducción
automática de un espacio antes y después de su ubicación, cosa que no ocurre con el símbolo &.
Podemos usar el símbolo de prolongación de línea para que dos líneas aparentes tengan consideración de
una única línea:
Como hemos visto, se puede introducir una línea con un Print sin mensaje para dejar una línea vacía, o
usar Tab para localizar el contenido a mostrar en un punto, por ejemplo:
Print Tab(18); A
La ventaja de Print es que es muy rápido de usar para visualizar contenidos y su inconveniente que a
efectos estéticos es poco interesante, además de que ya no está disponible en las versiones recientes de
Visual Basic. En general siempre será preferible usar otro tipo de formas de presentar datos como Labels o
MsgBox.
Ya hemos visto la utilidad del uso de arrays de variables. Por otro lado estamos viendo que los controles
son objetos prefabricados, con algunas propiedades que recuerdan a las variables. Por ejemplo, el
contenido de un TextBox "recuerda" al contenido de una variable. Siendo esto así, se comprenderá que
igual que es interesante trabajar con arrays de variables puede ser interesante trabajar con arrays de
controles.
CREAR UN ARRAY DE CONTROLES CON LAS VERSIONES MENOS RECIENTES DE VISUAL BASIC
Para crear un array de controles con las versiones menos recientes de Visual Basic haz lo siguiente:
En primer lugar, crea el control deseado y mantenlo con el nombre que por defecto le ponga Visual
Basic. Por ejemplo creamos un TextBox que se llamará Text1.
A continuación, pulsa sobre el control y mediante Ctrl+C ó a través del menú Edición - Copiar, copia el
control en el portapapeles.
Mediante Ctrl+V ó a través del menú Edición - Pegar, pega el control sobre el formulario. Te aparecerá
un mensaje del tipo: "Ya existe un control llamado Text1. ¿Desea crear una matriz de controles?" Este
mensaje no te aparecerá en las versiones más recientes de Visual Basic. Explicaremos cómo proceder
en el siguiente apartado.
Responde sí y comprobarás que aparece un control sobre el formulario cuyo nombre es Text1(1),
mientras que el control que ya existía anteriormente ha pasado a llamarse Text1(0).
Si repites pegar, te seguirán apareciendo controles con nombre Text1(2), Text1(3), Text1(4), etc.
En este formulario hemos definido 6 Labels denominados Label1(0), Label1(1), Label1(2), Label1(3),
Label1(4) y Label1(5) así como 6 TextBox denominados Text1(0), Text1(1), Text1(2), Text1(3), Text1(4) y
Text1(5). También podríamos haberlos nombrado simplemente como Label1, Label2, Label3, Label4,
Label5, Label6, etc. eligiendo en el momento de pegar no crear una matriz de controles. Pero al igual que
ocurre con las variables, resultará mucho más cómodo de cara al tratamiento de datos el nombrarlas
como una matriz de controles.
Podemos prescindir del control de localizador cero si así lo deseamos, simplemente borrándolo. De este
modo en vez de una serie de seis números tipo 0, 1, 2, 3, 4, 5 nos quedaríamos con 1, 2, 3, 4, 5, 6.
CREAR UN ARRAY DE CONTROLES CON LAS VERSIONES MÁS RECIENTES DE VISUAL BASIC
Para crear un array de controles con las versiones más recientes de Visual Basic ha de recurrirse a usar
código, lo cual resulta bastante más complicado que hacerlo de forma gráfica. Aquí vamos a poner la
definición del código que habría que emplear para generar un formulario como el visto anteriormente,
con 6 Labels y 6 TextBoxes. En este momento del curso no debemos entender este código por lo que no te
entretengas en su estudio. Cuando hayamos avanzado un poco más y visto las instrucciones relativas a
bucles, vuelve a este punto y repasa este código para comprobar que comprendes lo que hace. Nota: la
referencia Me es hacia el propio formulario principal que estamos usando.
REM Curso Visual Basic aprenderaprogramar.com
La programación en Visual Basic es guiada por eventos. Por tanto, cuando pedimos un dato hemos de
esperar a que suceda un evento para que continúe ejecutándose el código.
Sobre un formulario, coloca un TextBox, un Label y un Button (en algunas versiones de Visual Basic se
denomina Commandbutton), que es otro de los elementos de los que disponemos en la barra de
herramientas, cuyo símbolo es un rectángulo y que representa “un botón”. Una vez añadidos estos tres
controles al formulario vete a la ventana de código.
Observa que existen dos pestañas encima del espacio para la escritura de código. Si despliegas la pestaña
de la izquierda, verás que se encuentran los distintos objetos que forman el programa y que por el
momento son: el formulario o Form, la etiqueta o Label, la caja de texto o TextBox y el botón al que Visual
Basic por defecto le pone nombre Button1 ó Command1 según la versión que estemos utilizando.
Selecciona el Button1 (Command1). Ahora que tenemos en la pestaña izquierda seleccionado el botón, si
pulsamos la pestaña derecha se muestra una lista de eventos que son detectables para el control que
tenemos seleccionado. Por ejemplo, Click es el evento que se produce cuando el usuario hace click sobre
el botón. MouseMove es el evento que se produce cuando el usuario mueve el puntero encima del
CommandButton.
Cuando elegimos un objeto y un evento, aparece en la ventana de código el encabezado y terminación de
un procedimiento de respuesta a dicho evento. Veamos un ejemplo. Agranda el objeto label sobre el
formulario (establece la propiedad AutoSize a False para poder hacerlo), selecciona como control el botón
en la pestaña izquierda y MouseMove como evento en la pestaña derecha y escribe lo siguiente:
Ejecuta el programa y pasa el puntero del ratón sobre el botón. Comprobarás que aparecen múltiples
"Hola…" sobre el formulario (en el label). Es decir, cada vez que tiene lugar el evento, se ejecuta el código
asociado.
Al igual que otros controles que venimos viendo, un botón tiene propiedades cuya gestión es igual a lo
que hemos visto, en tiempo de diseño (trabajo gráfico sobre el formulario) o en tiempo de ejecución (a
través de código). Podemos destacar las siguientes:
Identificar al botón. Por ejemplo, un botón para realizar un cálculo podríamos nombrarlo
ButtonCalcular. Una rutina de respuesta a un click sería:
End Sub
Text ó Caption, según la versión de Visual Basic que estemos empleando: establece el texto que se
muestra al usuario sobre el botón. Por ejemplo, "Calcular".
AcceptButton (propiedad del formulario en versiones de Visual Basic más recientes) ó Default
(propiedad del botón en versiones menos recientes): es una propiedad interesante de los botones, ya
que nos permite establecer si una pulsación de enter por parte del usuario equivale a un click a efectos
de ejecución del código asociado. Es decir, supón que tienes un botón denominado ButtonCalcular y
que además tienes un TextBox donde pides al usuario que introduzca un dato. Si establecemos en las
propiedades del form como AcceptButton el ButtonCalcular (o establecemos Default como True para el
botón en las versiones menos recientes), cuando el usuario pulse enter después de introducir el texto
pedido, se ejecutará el código asociado. Prueba a establecer lo que hemos indicado con un formulario
en el que hayas insertado un botón, un TextBox y un Label y comprueba que habiendo escrito un texto
en el TextBox tras pulsar enter se ejecute el código previsto (que hará que se muestre “Has pulsado el
botón o pulsado enter…”) :
Option Explicit On
Option Explicit
Public Class Form1
Private Sub Button1_Click(ByVal sender As Object,
Private Sub Command1_Click()
ByVal e As System.EventArgs) Handles Button1.Click
Label1.Caption = Label1.Caption & "Has pulsado el Label1.Text = Label1.Text & "Has pulsado el
botón o pulsado enter... " botón o pulsado enter... "
End Sub End Sub
End Class
Comprobarás que tiene efecto ta nto hacer click sobre el Command Button com o pulsar enter. Ten en
cuenta q ue en muchas ocasiones, por ejemplo después de pedir un dato, una clave, etc. el usuario tiende
a pulsar enter para dar paso a la continuación d el programa. Esta propi edad te permite crear programa s
en los que se da releva ncia a la pu lsación de e nter.
Otras propiedades: al igual q ue con otros controles, existen difer entes propiedades que no hemos
citado. Prueba a m odificar y co mprobar lo s efectos de algunas de e llas.
ALGORITMO
g) Inicio
[Definición de vehículos]
Turismos = 32
Todoterrenos = 11
[Fin de definición de vehículos]
[Definición de capacidad de depósitos]
Capturismos = 40
Captodot = 65
[Fin de definición de capacidad de depósitos]
[Cálculo de necesidades de combustible]
Necesidadescom = Turismos * Capturismos + Todoterrenos * Captodot
12. [Fin de cálculo de necesidades de combustible]
13. Fin
El código será algo como lo que se muestra a continuación. Antes de escribir el código tenemos que crear
los objetos (controles) a que vamos a hacer referencia en el código, en concreto crearemos 6 labels, 4
TextBox y un botón.
Código (versionesVB menos recientes): Código (versiones VB más recientes):
Option Explicit On
Option Explicit
Public Class Form1
Rem Declaración de variables REM Declaración de variables
Dim Turismos%, Todoterrenos As Integer Dim Turismos, Todoterrenos As Integer
Dim Capturismos!, Captodot As Single Dim Dim Capturismos, Captodot As Single
Necesidadescom As Single Dim Necesidadescom As Single
Téngase en cuenta que se han declarado como código diversas órdenes que podrían haberse introducido
desde el diseño de objetos previo. Ten en cuenta también que todos los objetos que invocamos en el
código los hemos creado previamente sobre el formulario (menú Ver – Objeto); los nombres de los
objetos los pone Visual Basic (como en este ejemplo) al crearlos, o los establecemos en la ventana
Propiedades nosotros mismos si deseamos cambiarlos. Si tratas de invocar un objeto no definido o con un
nombre equivocado te saldrá un mensaje de error.
En un pequeño programa como este en el que tenemos varios labels, podemos optar tanto por usar arrays
de controles (en este caso los controles tendrán nombres como Label1(0), Label1(1), Label1(2), etc.) o
simplemente distintos controles (en este caso los nombres serán como Label1, Label2, Label3, etc.). Lo
mismo podemos decir en relación a las cajas de texto (TextBox). Recordar que en las versiones menos
recientes de Visual Basic es más sencillo crear arrays de controles que en las más recientes, ya que basta
copiar y pegar un control y Visual Basic pregunta directamente si queremos crear el array.
El resultado gráfico después de introducir los datos y pulsar aceptar será algo así:
1. Inicio
2. Mostrar “Introduzca el diámetro, en metros” : Pedir D
3. Mostrar “Introduzca la altura, en metros” : Pedir H
4. R = D/2 : Pi = 3,141593
5. V = Pi * (R ^ 2) * H
6. Mostrar “El volumen del cilindro es de”, V, “metros cúbicos”
7. Fin
Creamos un formulario donde insertamos dos Labels (podemos usar arrays de controles como Label1(0) y
Label1(1)) ó simplemente dos controles como Label1 y Label2, dos TextBox (podemos decir lo mismo que
para los labels) y un Label para resultados al que vamos a ponerle nosotros el nombre y que llamaremos
(LabelResultados), así como un botón al que llamaremos ButtonCalcular. El primer Label mostrará el
mensaje de solicitud del diámetro y el segundo Label el correspondiente a la altura. A través de los
TextBox el usuario introducirá los datos solicitados y a través del Label de resultados mostraremos los
resultados. El código será algo así:
Código (versionesVB menos recientes): Código (versiones VB más recientes):
Option Explicit On
Option Explicit
Rem Declaración de variables Public Class Form1
Const Pi As Single = 3.141592654 REM Declaración de variables
Const Pi As Single = 3.141592654
Dim R!, H!, V As Single
Dim R, H, V As Single
1. Inicio
2. Mostrar “Introduzca el precio del producto en el establecimiento número 1, en euros” : Pedir Precio1
3. Mostrar “Introduzca el precio del producto en el establecimiento número 2, en euros” : Pedir Precio2
4. Mostrar “Introduzca el precio del producto en el establecimiento número 3, en euros” : Pedir Precio3
5. Media = (Precio1 + Precio2 + Precio3) / 3
6. Mostrar “El precio medio del producto es”, Media, “Euros”
7. Fin
En el formulario insertamos tres Labels y tres TextBox para petición de datos, así como un botón y un
Label para cálculo y muestra de resultados. El código será algo así:
La sintaxis a emplear con Visual Basic es muy similar a la que se estudia en los cursos de algoritmia y
pseudocódigo, con la sustitución del Si por If, del Entonces por Then, del SiNo por Else y del Finsi por End
If. La única salvedad a tener en cuenta es que Visual Basic permite además de la escritura en bloques la
escritura en una sola línea.
Sintaxis en bloque:
If [condición] Then
Instrucción 1
Instrucción 2
·
·
·
Instrucción n
Else
Instrucción A
Instrucción B
.
.
.
Instrucción Z
End If
También es posible encadenar varias acciones derivadas de un Then o de un Else en una sola línea. Sin
embargo, recomendamos usar la opción de sintaxis en una sola línea exclusivamente para desarrollos
sencillos como puede ser una instrucción en caso de que se cumpla la condición y otra en caso de que no
se cumpla. Si intervienen varias instrucciones, siempre resultará más legible usar el formato de bloque.
La instrucción If ... Then es anidable dentro de sí misma, siendo siempre preferible el formato de bloque
cuando se vayan a generar anidamientos.
Ejemplo:
If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5")
También válido usar el símbolo _ (guión bajo) para indicar continuación de línea:
If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5") _
Una cuestión a tener en cuenta es que cuando la condición indicada por un If en bloque no se cumple, se
produce el salto a la siguiente instrucción inmediatamente posterior a la palabra End If. En cambio,
cuando la condición indicada por un If en una línea no se cumple, se produce el salto a la siguiente línea
ignorando todas las instrucciones que pudieran encontrarse en la misma línea del If. Veámoslo con un
ejemplo. Ejecuta estos dos pequeños programas:
Option Explicit On
Option Explicit Public Class Form1 Dim
Dim a% a%
Option Explicit On
Public Class Form1 Dim
Option Explicit a%
Dim a%
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
a=3 a = 3
If a = 5 Then MsgBox ("Se cumple que a vale 5"): a = 25 If a = 5 Then MsgBox("Se cumple que a vale
MsgBox ("El valor actual de a es " & a) 5") : a = 25
MsgBox("El valor actual de a es " & a) End
End Sub
Sub
End Class
En el programa 1 el resultado es que se muestra en pantalla "El valor actual de a es 25", mientras que en
el programa 2 se muestra "El valor actual de a es 3". La razón para que en la versión 2 no se ejecute la
orden a = 25 es que al no cumplirse la condición del If se produce un salto a la siguiente línea, ignorándose
todas las instrucciones que se encuentren en la misma línea del If. En general consideramos
recomendable habituarse a usar la sintaxis de bloque siempre pues resulta más fácil de interpretar y evita
posibles confusiones como ésta, donde muchas personas podrían pensar que si no se cumple el if se
ejecutará la instrucción que aparece en la misma línea a continuación.
Crear un programa que pida un número entero distinto de cero y nos muestre en pantalla un mensaje
indicándonos si el número es par o impar. Nota: El procedimiento a emplear será basado en el uso del
operador Mod.
SOLUCIÓN
Crearemos un Label de solicitud del número, un Textbox de entrada, un Button (Command Button en las
versiones menos recientes de Visual Basic) y un Label para el cálculo y el resultado. Le ponemos los
nombres y organizamos los controles en pantalla como nos parezca correcto (no tiene por qué coincidir
con lo que ponemos aquí). Los nombres que hemos empleado nosotros son: LabelPideNum, TextNentero,
ButtonHallar y LabelResultado.
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Gráficamente:
Hemos escrito el If ... Then – Else como un bloque en vez de como una única línea. El motivo para ello es
que aporta mayor claridad y facilidad de interpretación.
EJERCICIO ECUACIÓN DE SEGUNDO GRADO (ECUACIÓN CUADRÁTICA)
Crear un programa que resuelva la ecuación cuadrática tipo ax2 + bx + c. El planteamiento del problema y
su solución en forma de pseudocódigo se pueden encontrar en el curso “Bases de la programación nivel I”
de aprenderaprogramar.com, dentro de los ejercicios relacionados con condicionales. Una vez creado el
programa, hay que contrastar su correcto funcionamiento.
SOLUCIÓN
Usaremos tres Labels para pedir los parámetros a, b y c denominados Labela, Labelb y Labelc, y tres
TextBox para que el usuario introduzca datos (Texta, Textb y Textc) además de un botón (ButtonCalcular).
Nosotros hemos añadido además un mensaje de cabecera con un label (LabelTitulo). Mostraremos
primero el código para versiones de Visual Basic más recientes y luego para versiones menos recientes.
Ten en cuenta que la lógica de los programas es en ambos casos igual, lo único que varía son los detalles
de la sintaxis.
Option Explicit On
Public Class Form1
REM Declaración de variables
Dim aNumber, bNumber, cNumber, dNumber, eNumber As Single
End Sub
If dNumber = 0 Then
LabelResultado.Text = "x1 = x2 = " & -bNumber / eNumber
Else
If dNumber > 0 Then
LabelResultado.Text = "x1 = " & (-bNumber + Math.Sqrt(dNumber)) / eNumber
LabelResultado.Text = LabelResultado.Text & vbCrLf & "x2 = " & (-bNumber -
Math.Sqrt(dNumber)) / eNumber
Else
LabelResultado.Text = "x1 = " & -bNumber / eNumber & " + " & Math.Sqrt(-dNumber) /
eNumber & " * " & Math.Sqrt(-dNumber) / eNumber & " * i"
End If
End If
End Sub
End Class
Nota: en versiones recientes de Visual Basic algunas letras están reservadas y no pueden ser usadas como
nombres de variables. Por ejemplo la letra e. De ahí que en vez de nombrar a las variables como a, b, c, d,
e las hayamos nombrado aNumber, bNumber, cNumber, dNumber y eNumber.
Option Explicit
Rem Declaración de variables
Dim a!, b!, c!, d!, e As Single
COMENTARIOS
El programa (ambas versiones de código) "funciona", si bien tiene sus limitaciones. Prueba a introducir los
siguientes datos: a = 0, b = 3 y c = 1 . Te aparecerán resultados extraños (o un error como "Error 6 en
tiempo de ejecución. Desbordamiento"). El motivo para esos resultados extraños o errores es que si a = 0
implica que e = 0 y al encontrarnos con una operación del tipo (− b + Sqr(d)) / e donde el denominador
vale cero... ¡operación matemática no permitida! Esto ocurrirá mientras no preparemos el programa para
detectar este tipo de situaciones y darles un tratamiento adecuado, cosa que veremos más adelante.
Estamos construyendo programas sencillos que en líneas generales responden bien cuando se dan las
circunstancias previstas pero que fallan ante situaciones extrañas. Esto no debe preocuparnos por el
momento, ya que a medida que progresemos como programadores iremos construyendo programas cada
vez más sólidos.
Aspecto gráfico:
EJEMPLOS CON IF THEN ELSE EN VISUAL BASIC: PARADOJA DEL SI BURLADO POR UN INTERVALO
Código 1 (versiones menos recientes de VB): Código 1 (versiones más recientes de VB):
Option Explicit On
Option Explicit Public Class Form1 Dim A
As Integer
Dim A%
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs)
A = 160 Handles MyBase.Load
A = 160
If 50 < A < 75 Then
If 50 < A < 75 Then
MsgBox ("Arabia") MsgBox("Arabia")
Else Else
MsgBox ("Eusebio") MsgBox("Eusebio") End
End If If
End Sub End
End Sub
Class
Código 2 (versiones menos recientes de VB): Código 2 (versiones más recientes de VB):
Si bien podría esperarse obtener el mismo resultado con ambos códigos, al ejecutar el código 1
obtenemos como resultado que se muestre en pantalla "Arabia", mientras que al ejecutar el código 2 se
muestra "Eusebio". La razón: Visual Basic no admite comparaciones dobles del tipo x < y < z. Ante este
tipo de escritura, sólo es evaluada la primera condición de las dos pretendidas. ¿Solución? No usar
comparaciones dobles.
Este “resultado inesperado” puede ocasionar un buen quebradero de cabeza, ya que en un programa
extenso no será nada fácil detectar este error. Como remedio, usaremos siempre la escritura de
condiciones una detrás de otra y no de forma múltiple.
Select Case Visual Basic. Palabras clave To, Is.
Instrucción Según (Caso) Hacer. Ejemplos y
ejercicios resueltos
INSTRUCCIÓN SEGÚN (CASO) HACER (SELECT CASE)
La expresión a evaluar puede ser un valor numérico o una cadena de texto. Sólo se puede evaluar una
expresión y no múltiples expresiones. La evaluación de expresiones puede ser:
a) De coincidencia: por ejemplo, Case 12 indicaría que si la expresión evaluada vale 12 se ejecutarán las
instrucciones anexas.
b) De intervalo: usando la palabra clave To. Por ejemplo, Case 12 To 14 indicaría que si la expresión
evaluada tiene un valor comprendido entre 12 y 14 (incluidos los extremos de los intervalos), se
ejecutarán las instrucciones anexas.
c) De comparación: usando la palabra clave Is. Por ejemplo, Case Is <= 14 indicaría que si la expresión
evaluada tiene un valor menor o igual a 14 se ejecutarán las instrucciones anexas.
Cuando varios casos son válidos, sólo se ejecutan las instrucciones asociadas al primer caso verificado,
siguiendo el flujo del programa por la siguiente instrucción después de End Select. Esto debemos tenerlo
muy en cuenta, ya que si pretendemos que cuando se cumplan dos condiciones se ejecuten sendos
bloques de instrucciones, convendrá hacerlo a través de la instrucción If en vez de a través de Select Case.
Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su
correspondiente terminación End Select.
La instrucción Select Case presenta similitudes marcadas con la instrucción If - Then. Por ello, en general
podremos conseguir resultados similares con ambas instrucciones y elegir usar una u otra dependerá de
nuestro gusto y de cuál se adapte mejor a nuestros intereses, que en general serán ahorrar código y
conseguir claridad para cumplir el objetivo. Otras veces será interesante anidar ambas instrucciones.
Prueba el siguiente código:
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Option Explicit On
Option Explicit
Dim A As Integer Public Class Form1 Dim A
As Integer
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs)
A = 12 Handles MyBase.Load
Select Case A A = 12
Case 12 Select Case A
Case 12
MsgBox ("A vale 12")
MsgBox("A vale 12")
Case Is < 14 Case Is < 14
MsgBox ("A es menor que 14") MsgBox("A es menor que 14")
Case 160 To 200 Case 160 To 200
MsgBox ("A está comprendida entre 160 y 200") Case MsgBox("A está comprendida entre
160 y 200")
Else
Case Else
MsgBox ("No se ha verificado ninguna de las MsgBox("No se ha verificado
condiciones previstas") ninguna de las condiciones previstas")
End Select End Select End
End Sub Sub
End Class
El resultado es que se muestra en pantalla "A vale 12". Sin embargo, a pesar de que la hipótesis A < 14 se
cumple, no llega a evaluarse y por tanto las instrucciones asociadas a este caso no se ejecutan.
EJERCICIO
Transformar en código de Visual Basic el siguiente enunciado: crear un programa que pida al usuario un
número de día y un número de mes, evalúe si la entrada es correcta y en caso de que así sea calcule el día
del año que es, considerando un año no bisiesto.
SOLUCIÓN
Crearemos tres labels a los que denominaremos Label1, Label2 y LabelResultado. Label1 servirá para
mostrar un mensaje solicitando que se introduzca el número de día, Label2 servirá para mostrar un
mensaje solicitando que se introduzca el número de mes y LabelResultado servirá para mostrar el
resultado.
Crearemos dos TextBoxes denominados Text1 y Text2. El primero de ellos servirá para que el usuario
introduzca el dato de número de día y el segundo el dato de número de mes.
Finalmente tendremos un botón denominado ButtonCalcular que servirá para mostrar los resultados una
vez el usuario haya introducido el dato de número de día y número de mes.
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Vamos a ver cómo materializar con Visual Basic estructuras de repetición que permitirán que en nuestros
programas se realice un proceso n veces. En concreto veremos las instrucciones Desde … Siguiente (For …
Next) con su cláusula Paso (Step), la instrucción Mientras … Hacer (Do While … Loop) y la instrucción
Hacer … Repetir Mientras (Do … Loop While). Muchas veces podremos optar indistintamente por usar una
instrucción u otra. En otros casos, es recomendable decantarse por una de ellas por hacer el programa
más legible o sencillo que usando otras opciones.
INSTRUCCIÓN DESDE ... SIGUIENTE (FOR ... NEXT) Y CLÁUSULA PASO (STEP)
For VAR = Vi To Vf
Instrucción 1
Instrucción 2
·
·
·
Instrucción n
Next VAR
El incremento que sufre el contador es, por defecto, unitario. Es decir, el primer valor que toma VAR en el
bucle será Vi, el segundo Vi + 1, el tercero (Vi + 1) + 1, etc. La modificación de dicho valor de incremento la
realizaremos a través de la cláusula Step después del valor Vf. Step 2 implicará que en cada repetición del
bucle el contador se incremente en dos unidades, Step 5 implicará que en cada repetición del bucle el
contador se incremente en cinco unidades. Un paso negativo del tipo Step -1 supone que el contador
decrece en vez de incrementarse. Si el paso es negativo, Vi necesariamente habrá de ser mayor que Vf, ya
que en caso contrario no se producirá la entrada en el bucle.
Con este código se nos muestra en pantalla 3 veces hola (se ha invertido el sentido del bucle):
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Option Explicit On
Public Class Form1
Option Explicit
Private Sub Form1_Load(ByVal sender As
Dim VAR As Integer System.Object, ByVal e As System.EventArgs)
Dim Vi As Integer Handles MyBase.Load
Dim Vf As Integer Dim VAR As Integer
Private Sub Form_Load() Dim Vi As Integer
Dim Vf As Integer Vi
Vi = 1
= 1
Vf = 3 Vf = 3
For VAR = Vf To Vi Step –1 For VAR = Vf To Vi Step -1
'[También supondría tres repeticiones For VAR = '[También supondría tres repeticiones
Vi to Vf] For VAR = Vi to Vf]
MsgBox("hola")
MsgBox ("hola")
Next VAR
Next VAR End Sub
End Sub End Class
Con Visual Basic resulta admisible usar Next sin indicar la variable que está sirviendo de guía del bucle,
pues todo bucle ha de tener un cierre. Sin embargo, no lo creemos recomendable pues puede dificultar la
lectura y depuración de los programas.
La instrucción For ... Next es anidable dentro de sí misma o dentro de otros tipos de bucles o estructuras,
debiendo seguir las pautas que ya hemos comentado.
EJERCICIO
Transformar en código el siguiente planteamiento: queremos generar un programa que pida un número
del 1 al 10 y nos muestre la “tabla de multiplicar” correspondiente.
SOLUCIÓN
Hemos realizado la pregunta relativa al número cuya tabla se desea conocer utilizando un InputBox.
Igualmente válido hubiera sido hacerlo con un Label contenedor de la pregunta y un TextBox donde el
usuario introduce la información. La tabla la mostramos sobre un Label denominado LabelTabla.
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Option Explicit On
Option Explicit Public Class Form1 Dim
T As Integer Dim i
Dim T As Integer As Integer
Dim i As Integer
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs)
Form1.Caption = "Tabla" Handles MyBase.Load
Me.Text = "Tabla"
T = Val(InputBox("¿Qué tabla quiere conocer?" & vbCrLf T = Val(InputBox("¿Qué tabla quiere
&_ conocer?" & vbCrLf & _
"(Introduzca un número de 1 a 10)", "¿Número?")) "(Introduzca un número de 1 a 10)", "¿Número?"))
LabelTabla.FontBold = True LabelTabla.Alignment = 2 LabelTabla.Font = New Font("Arial", 10,
FontStyle.Bold)
LabelTabla = "TABLA DEL " & T & vbCrLf &
LabelTabla.TextAlign = ContentAlignment.MiddleCenter
vbCrLf LabelTabla.Text = "TABLA DEL " & T & vbCrLf &
vbCrLf
For i = 1 To 10 For i = 1 To 10
LabelTabla = LabelTabla & T & " * " & i & " = " & T LabelTabla.Text = LabelTabla.Text & T & "
* " & i & " = " & T * i & vbCrLf
* i & vbCrLf
Next i
Next i End Sub
End Sub End Class
Gráficamente:
EJERCICIO
Transformar en código el siguiente planteamiento: queremos generar un programa que muestre todos los
enteros comprendidos entre un número definido por el usuario y 100.
SOLUCIÓN
Código (versiones menos recientes VB): Código (versiones más recientes VB):
Do While [condición]
Instrucción 1
Instrucción 2
.
.
.
Instrucción n
Loop
Las instrucciones tipo Do While son anidables dentro de sí mismas o dentro de otras estructuras. Es
importante verificar que los bucles diseñados con esta instrucción dispongan de una condición de salida
válida.
Ejemplo: k = 0: Do while k < 5. Dentro del bucle tendremos que incrementar el valor de k, k = k +1.
INSTRUCCIÓN HACER ... REPETIR MIENTRAS (DO ... LOOP WHILE)
Do
Instrucción 1
Instrucción 2
.
.
.
Instrucción n
Loop While [condición]
Un Do ... Loop While es anidable dentro de sí mismo o dentro de otras estructuras. Es importante verificar
que los bucles diseñados con esta instrucción dispongan de una condición de salida válida.
Ejemplo:
Do
LabelTabla.Text = LabelTabla.Text & "Iteración " & k & vbCrLf k =
k + 1
Loop While k <= 5
Visual Basic admite además de la cláusula While, usar el término Until, como equivalente a "hasta que
se cumpla que". Así Loop Until i >= 3 significaría "Repetir hasta que i sea mayor o igual que 3". En un bucle en
el que i parte de un valor cero y se incrementa unitariamente Do While i < 3
sería equivalente a Do Until i >= 3, y Loop Until i >= 3 sería equivalente a Loop While i < 3. Dado que podemos
valernos de equivalencias, puede evitar confundirnos el usar preferentemente un mismo tipo de expresión,