Tutorial Aprender Visual Basic
HERRAMIENTAS LÓGICAS Y MATEMÁTICAS EN VISUAL BASIC
Visual Basic clasifica los operadores con que trabaja de la siguiente manera:
- Operadores aritméticos: operadores utilizados para ejecutar cálculos matemáticos.
- Operadores de comparación: operadores utilizados para efectuar comparaciones.
- Operadores de concatenación: operadores utilizados para combinar cadenas de caracteres.
- Operadores lógicos: operadores usados para realizar operaciones lógicas.
La mayoría de estos operadores han sido explicados en el curso “Bases de la programación nivel I” de aprenderaprogramar.com. El operador & tiene interés para concatenar cadenas. Por ejemplo "Hoy puede" & "ser un gran día" equivale a "Hoy puede ser un gran día”. Te remitimos a la ayuda de Visual Basic para obtener mayor información sobre operadores. Ten en cuenta que puede haber pequeñas diferencias entre las distintas versiones de Visual Basic.
En cuanto a las funciones matemáticas, algunas de las funciones disponibles son las siguientes:
Vamos a centrarnos en algunas funciones que no se han descrito en el curso “Bases de la programación nivel I”. Empezando por Fix e Int, se trata de funciones que devuelven la parte entera de un número, que es diferente a redondear. La diferencia entre ambas es que si el número es negativo Int devuelve el primer entero menor o igual mientras que Fix devuelve el primer entero mayor o igual.
Ejemplo:
Int(8.7) = 8 Int( − 8.7) = − 9
Fix(8.7) = 8 Fix( − 8.7) = − 8
La función Rnd permite generar números aleatorios. Por su importancia para la programación y para la
verificación de programas, vamos a desarrollarla un poco más extensamente.Fix(8.7) = 8 Fix( − 8.7) = − 8
En las versiones más recientes de Visual Basic para usar una función matemática debemos escribir Math.nombreDeLaFuncion (valorACalcular). Por ejemplo, este es un pequeño programa para calcular la raíz cuadrada de un número.
La función Sgn (Math.Sign en las versiones más recientes) devuelve el signo de un número o de una variable numérica tomando valor 1 para un número positivo, − 1 para un número negativo y cero cuando el número es cero. Supongamos A = 7.44, B = − 23, C = 0.
Versiones menos recientes:
Sgn(A) = 1 Sgn(43) = 1
Sgn(B) = − 1 Sgn( − 453.33) = − 1
Sgn(C) = 0 Sgn(0) = 0
Versiones más recientes:Sgn(B) = − 1 Sgn( − 453.33) = − 1
Sgn(C) = 0 Sgn(0) = 0
Math.Sign(A) = 1 Math.Sign(43) = 1
Math.Sign(B) = − 1 Math.Sign ( − 453.33) = − 1
Math.Sign(C) = 0 Math.Sign(0) = 0
Si vas a trabajar con constantes físicas o matemáticas te resultará de interés la instrucción
Const para declaración de constantes. La ventaja de declarar una constante en vez de una variable
es que la constante no puede variar en el transcurso del programa. Por tanto, se impide que por
error pueda tener un valor no válido en un momento dado. Las constantes facilitan la documentación
del programa y lo hacen fácil de modificar. Una declaración tipo de constante podría ser la siguiente:Math.Sign(B) = − 1 Math.Sign ( − 453.33) = − 1
Math.Sign(C) = 0 Math.Sign(0) = 0
Const Pi As Double = 3.14159265358979
El redondeo de un decimal a un entero se realiza en Visual Basic a través de la función CInt,
correspondiente a un grupo de funciones denominadas "Funciones de conversión de tipos" que no
vamos a entrar a estudiar. CInt(A) devuelve el valor de A redondeado al número entero más próximo.
Prueba a visualizar el resultado de este código:
Dim A As Double
A = 7.32
MsgBox("El redondeo de 7.32 es " & CInt(A))
GENERACIÓN DE NÚMEROS ALEATORIOS – FUNCIÓN RndA = 7.32
MsgBox("El redondeo de 7.32 es " & CInt(A))
La generación de números aleatorios adquiere gran relevancia para un programador, pudiendo usarse para:
- Construcción preliminar de programas, en los que a falta de datos definitivos introducimos datos aleatorios.
- Simular procesos aleatorios (número resultante de tirar un dado, elección de un color por parte de una persona, número premiado en un sorteo de lotería, cantidad de personas que entran a un supermercado en una hora...)
- Verificación de programas, y en particular simular datos que le llegan al programa como si fueran datos provinientes de entradas de usuario, de una base de datos, de un fichero, etc.
- Otras aplicaciones.
Conviene recordar que "aleatorio" no puede confundirse con "cualquier cosa", "descontrol", "incierto", "impredecible", etc. Usaremos aleatorio más en el sentido de no predeterminado que en el de no predecible, ya que en general vamos a definir qué tipo de resultado queremos obtener y en qué rango de valores debe estar. Vamos a imaginar que Visual Basic genera números aleatorios como si fuera un robot lanzador de dardos muy preciso (robot Rnd). De este modo, cuando se le dice que comience a tirar dardos en distintas posiciones, repite siempre los lugares. Por ejemplo, si la diana está marcada con números, cada vez que le decimos que tire genera la misma secuencia: 7, 5, 6, 3, etc. ¿Cómo conseguir convertir este proceso predefinido en aleatorio? Pues simplemente poniendo a girar la diana (mayordomo Randomize) esta vez a una velocidad que depende del segundo del día en que nos encontremos. Así pues, el proceso lo dividimos en decirle al mayordomo que ponga a girar la diana y en decirle al robot que dispare. Bueno, un poco simple, pero ¿para qué complicarnos? Veamos la sintaxis a emplear:
1) Asignación de valor aleatorio a una variable
Randomize [Instrucción que inicializa el generador de números aleatorios]
Variable = Rnd [Obtención de un número aleatorio igual o mayor que cero y menor que uno]
En las versiones más recientes de Visual Basic la sintaxis es Randomize(): Variable = Rnd()
2) Mostrar un valor aleatorio.
Randomize: MsgBox (“El número aleatorio es “ & Rnd) para las versiones menos recientes
Randomize() : MsgBox("El número aleatorio es " & Rnd()) para las versiones más recientes
El valor devuelto por Rnd es de tipo Single, aunque si la variable a la que se asigna el contenido de Rnd es de otro tipo, tendrá lugar la conversión del valor originario para adaptarlo al tipo de variable de que se trate. Un aspecto importante a tener en cuenta es que el valor devuelto se encuentra en el rango 0 <= Rnd < 1. Es decir, el número devuelto puede ser cero pero no puede ser uno. Podemos trasladarnos a un intervalo distinto simplemente multiplicando. Por ejemplo Rnd * 100 ó Rnd() * 100 devolverá números comprendidos entre cero y cien excluido el cien. Si usamos CInt(Rnd * 100) ó CInt(Rnd() * 100) estaremos convirtiendo el tipo Single que nos devuelve el Rnd en un tipo Integer, con lo que obtenemos valores enteros comprendidos entre 0 y 99.
Un caso muy habitual será el de querer generar números aleatorios comprendidos en un intervalo delimitado por un límite superior y un límite inferior siendo estos límites valores positivos. Para ello podemos usar la fórmula:
N = (Limsup - Liminf) * Rnd + Liminf
Limsup y Liminf son los límites superior e inferior respectivamente (valores positivos) y N el número
aleatorio generado. El primer sumando puede adquirir el valor comprendido entre cero y el intervalo
diferencia, excluido éste. El segundo sumando determina que el valor debe estar necesariamente
comprendido entre el límite inferior y el límite superior.Consideremos ahora que queremos generar valores enteros comprendidos entre a y b incluidos ambos, siendo a y b valores positivos. La fórmula a emplear sería:
N = Int((b - a + 1) * Rnd + a)
En este caso, usamos un truncamiento para garantizar que el valor superior del intervalo se encuentre
entre los posibles valores de N.Una instrucción Randomize te puede servir para varios Rnd. De todas formas, cuando tengas dudas, pon un Randomize asociado a cada uno de los Rnd.
Recuerda que en algunas versiones se usa Randomize y Rnd sin paréntesis y en otras se usa Randomize() y Rnd() con paréntesis.
EJERCICIO CON RND Y RANDOMIZE
Vamos a generar un programa en Visual Basic donde utilizaremos el comando Rnd para generación de números aleatorios. El ejercicio es el siguiente: crear el código de un programa en el que se declaran tres variables tipo Single A, B y C cuyo valor se muestra en pantalla y debe estar comprendido entre cero y 10, excluido el diez.
EJERCICIO NÚMEROS ALEATORIOS
Crear el código de un programa que genera tres números enteros aleatorios A, B, C comprendidos entre 65 y 90, ambos inclusive, y los muestra en pantalla.
Comentarios: Si quieres respetar la literalidad de la fórmula que expusimos en apartados anteriores del curso puedes escribir con igual resultado lo siguiente:
A = Int((90 - 65 + 1) * Rnd + 65); B = Int((90 - 65 + 1) * Rnd + 65); C = Int((90 - 65 + 1) * Rnd + 65)
CONCATENACIÓN DE ÓRDENES Y ORDENACIÓN SIMBÓLICA DEL CÓDIGOLa escritura de órdenes con Visual Basic se realiza con los criterios que ya hemos visto: las instrucciones pueden escribirse una debajo de otra en líneas independientes o bien en una misma línea separadas por dos puntos. Así estos dos códigos resultan equivalentes:
La sangría al escribir código la estableceremos normalmente a través del tabulador, aunque para algunas instrucciones puede ser el propio editor de Visual Basic quien establezca la sangría automática. Si introducimos sangrías manualmente, el primer nivel de sangrado corresponderá a una primera pulsación del tabulador, el segundo nivel a dos pulsaciones y así sucesivamente...
A través del menú Opciones, Herramientas... (en algunas versiones hay que entrar además en Editor de texto, Basic, Tabulaciones) Visual Basic nos da la posibilidad de configurar el sangrado que deseamos a través de dos opciones:
1. Sangría automática: cuando incluyamos una tabulación en la primera línea de código todas las líneas siguientes comenzarán en esa posición de tabulación.
2. Ancho de tabulación (tamaño de tabulación): establece el ancho de la tabulación, ancho que puede oscilar entre 1 y 32 espacios, con un valor predeterminado de 4 espacios. Podemos establecer el valor que mejor se adapte a nuestras necesidades o gustos estéticos.
Una posibilidad que puede resultar interesante es la de usar un símbolo de prolongación de línea cuando tenemos una línea muy larga que no queremos separar a través de un símbolo de dos puntos. Para ello usamos el símbolo de concatenación de línea, que es un guión bajo ( _ ). Dicho símbolo indicará que el texto que aparece en dos líneas, a efectos de ejecución del programa será tratado como si de una línea se tratara. Veamos el siguiente ejemplo:
Introducimos un símbolo de guión bajo cada vez que queramos continuar una línea. Hemos dividido una línea larga en tres renglones de longitud media. Los motivos para ello pueden ser varios, como estimarlo mejor para la ejecución del programa, o simplemente evitar que en el visor del editor nos quede la línea cortada y que podamos verla en toda su longitud. Prueba a escribir la línea dividiéndola en cuatro a través del guión bajo o dejándola completa sin divisiones. ¿No te parece que "el efecto" visual es muy distinto?
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.
Visualiza el formulario y vete en el cuadro de herramientas al botón correspondiente a TextBox, representado por un símbolo ab|. Pulsando dos veces sobre él, o pulsando una vez y después insertándolo en el formulario, tendrás un TextBox cuyo nombre por defecto será Text1, TextBox1 ó similar. Agrándalo un poco y sin haber escrito código para el programa, da orden de ejecutar. El resultado es que te aparece el formulario con el TextBox sobre él. Puede que te aparezca vacío o que muestre un texto por defecto como Text1 dentro del TextBox. En la vista del diseño del formulario podemos escribir el mensaje que queramos dentro del TextBox. Borra el contenido de texto en el TextBox (si es que había alguno) y escribe por ejemplo "Realizada modificación del textbox" y pulsa enter. Quizás no hayas podido agrandar el TextBox en sentido vertical, ahora veremos cómo se puede hacer.
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:
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.
Hemos cambiado la propiedad de color indicándole que cambie a vbGreen ó Color.Green. VbGreen ó Color.Green se corresponden con constantes predefinidas por Visual Basic que tenemos disponibles para ser usadas cuando estemos escribiendo código.
Visual Basic define constantes para simplificar la programación. Puedes consultar “Constantes de Visual Basic" para conocer todas las constantes definidas, que se agrupan en constantes de color, Calendar, del compilador, de fecha, Dir, GetAttr y SetAttr, IMEStatus, Instr, StrComp, de código de teclas, MsgBox, QueryClose, Shell, StrConv, de color del sistema, VarType y otras.
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:
- TextAlign ó Alignment: permite que el texto se alinee a la izquierda, a la derecha, o que aparezca centrado.
- BorderStyle ó Appearance: cambia la apariencia que puede ser tridimensional o plana.
- Enabled: si está establecido a True permite que se pueda escribir sobre el TextBox. Si está establecida a False, impide que el usuario pueda modificar el contenido del TextBox.
- Maxlenght: limita el número máximo de caracteres que puede admitir un TextBox. Si escribimos el valor 0, esto indica la ausencia de un máximo distinto del que imponga la memoria del sistema del usuario (lo cual será un valor muy grande, prácticamente equivalente a decir “se admite cualquier longitud de texto). Un valor mayor que 0 indica el número máximo de caracteres. Por ejemplo si establecemos el valor en 5, el usuario podrá escribir “perro” porque tiene 5 letras, pero no podrá escribir “serpiente” por tener más de 5 letras, sólo podría escribir << serpi >>
- Multiline: establecido a False supone que el TextBox consta de una línea única. Establecido a True permite que el TextBox conste de múltiples líneas. En algunas versiones es necesario establecer Multiline como true si queremos agrandar verticalmente el formulario.
- Scrollbars: permite añadir barras de desplazamiento verticales, horizontales o ambas al TextBox. - Visible: determina si el TextBox resultará visible para el usuario o no.
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.
LA FUNCIÓN VAL
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.A = Val(TextBox1.Text)
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 del tipo n = Val(InputBox("Introduzca un número", "Introducción de número")), donde n es una variable que toma el valor que haya introducido el usuario. Valiéndote de la ayuda, prueba a crear distintos Inputbox.
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.
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.
MOSTRAR CON VISUAL BASIC MEDIANTE LABELS
Ya sabemos que un Label sirve para insertar mensajes en un formulario que el usuario no podrá modificar. También hemos visto cómo insertarlos en el formulario. En cuanto a propiedades de los Labels, contenido, etc. su manejo es básicamente igual que el de los TextBox, con lo que prácticamente todo lo explicado en relación a los TextBox es también válido para los Labels. Por ejemplo, podrás escribir Label1.BackColor = Color.Green (ó Label1.BackColor = vbGreen según la versión de Visual Basic que estés utilizando) de forma análoga a como lo hicimos con TextBox.
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.
Aparte de las propiedades que ya conocemos podemos destacar:
- 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.)
Prueba a crear un Label y establecer diferentes mensajes y propiedades para el mismo.
Para mostrar un mensaje compuesto de distintas partes en un Label hemos de usar el símbolo de concatenación. Por ejemplo:
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:Label1 = msg1 & msg2
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:
Mostrar "Introduzca su peso en kgs por favor": Pedir Peso
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.
b) 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.
MOSTRAR CON VISUAL BASIC MEDIANTE PRINT
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:
Print "La respuesta es"; A; "euros"
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í:
Print "La respuesta es", A; "euros"
da lugar a un resultado del tipo:
La respuesta es 32 euros.
También es posible usar el símbolo de concatenación &:
Print "La respuesta es " & A & " euros"
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:
Print "La respuesta es"; A; _
"euros"
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.
MATRICES O ARRAYS DE CONTROLES
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.
Esta posibilidad nos permite crear formularios del tipo:
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.
CÓDIGO ASOCIADO A EVENTOS. COMMAND BUTTONS.
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.
Crea ahora un procedimiento de respuesta al click de este tipo:
Comprobarás que cada vez que haces click sobre el botón se muestra el mensaje “Hola...” en el label sobre el formulario. Este tipo de procesos es vital en los programas: piensa cuando instalas un programa, cuántas veces pulsas Aceptar ó Continuar. Cada vez que lo haces, das lugar a que se ejecute un paquete de código. En cambio, si no lo haces, no tiene lugar el evento y puedes irte a tomar un café. Cuando vuelvas encontrarás que no ha sucedido nada.
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:
- Name: establece el nombre del botón. Recomendamos que siempre sea un prefijo común a todos los botones seguido de un término que nos permita 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:
Private Sub ButtonCalcular_Click(...)
...
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"....
End Sub
- 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...”) :
Comprobarás que tiene efecto tanto hacer click sobre el CommandButton como pulsar enter. Ten en cuenta que 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 del programa. Esta propiedad te permmite crear programas en los que se da relevancia a la pulsación de enter.
- Otras propiedades s: al igual que con otros s controles, existen diferentes propiedades que no hemos citado. Prueba a modificar y comprobar los efectos de algunas de ellas.