0% encontró este documento útil (0 votos)
148 vistas38 páginas

Apunte Visual Basic 3

Este documento describe el uso de TextBox en Visual Basic. Un TextBox es un control que se puede usar para pedir datos al usuario. Un TextBox tiene propiedades como color de fondo, alineación de texto, y estilo de borde que pueden modificarse. La función Val se puede usar para convertir el texto en un TextBox a un valor numérico para su uso en el código.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
148 vistas38 páginas

Apunte Visual Basic 3

Este documento describe el uso de TextBox en Visual Basic. Un TextBox es un control que se puede usar para pedir datos al usuario. Un TextBox tiene propiedades como color de fondo, alineación de texto, y estilo de borde que pueden modificarse. La función Val se puede usar para convertir el texto en un TextBox a un valor numérico para su uso en el código.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

TextBox de Visual Basic.

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.

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:

Código (versionesVB menos recientes): Código (versiones VB más recientes):

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.

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.

TextBox e InputBox Función Val con Visual


Basic. Convertir String a Integer o numérico.
Ejemplos con TextBox e InputBox.
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.
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.
Código (versionesVB menos recientes): Código (versiones VB más recientes):

Option Explicit Public Class Form1


Dim A As Single Dim A As Single
Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal
A = Val(Text1.Text) e As System.EventArgs) Handles MyBase.Load
MsgBox ("A vale " & A) A = Val(TextBox1.Text)
A = Val(InputBox("Introduzca un
número", MsgBox("A vale " & A)
A = Val(InputBox("Introduzca un número",
"Introducción de número")) "Introducción de
MsgBox ("A vale " & A) número"))
End Sub MsgBox("A vale " & A)

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.

Labels en Visual Basic. Autosize. BorderStyle.


Font. Otras formas de mostrar mensajes:
MsgBox, Print.
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.
• 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.)

Código (versionesVB menos recientes): Código (versiones VB más recientes):

Rem Curso Visual Basic REM Curso Visual Basic aprenderaprogramar.com


aprenderaprogramar.com Option Explicit On
Option Explicit Public Class Form1
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As
Show
System.Object, ByVal e As System.EventArgs) Handles
Label1.Caption = "Introduzca su peso en kgs MyBase.Load
por favor" Label1.Text = "Introduzca su peso en kgs por favor"
Label1.Font.Size = 10 Me.Label1.Font = New Font("Arial", 10, FontStyle.Bold)
Label1.Font.Bold = True End Sub
End Sub
End Class
El resultado esperado es algo así:

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 con Visual Basic.


Creación en diseño o mediante código.
Ejemplos
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.
REM Curso Visual Basic aprenderaprogramar.com

Public Class Form1


Dim LabelArray(6) As Label
Dim TextBoxArray(6) As TextBox

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles MyBase.Load
Dim i As Integer
For i = 1 To 6
LabelArray(i) = New Label : TextBoxArray(i) = New TextBox
LabelArray(i).Text = "Dato " & i
LabelArray(i).Width = 120 : TextBoxArray(i).Width = 100
LabelArray(i).Height = 30 : TextBoxArray(i).Height = 30
TextBoxArray(i).AutoSize = False LabelArray(i).TextAlign =
ContentAlignment.MiddleCenter LabelArray(i).BorderStyle =
BorderStyle.FixedSingle
LabelArray(i).Font = New Font("Arial", 10, FontStyle.Bold)
LabelArray(i).Location = New Point(100, i * 50)
TextBoxArray(i).Location = New Point(260, i * 50)
Me.Controls.Add(LabelArray(i)) : Me.Controls.Add(TextBoxArray(i))
Next
End Sub
End Class

Buttons (Command Buttons) en Visual Basic.


Propiedades y ejemplos. Código asociado a
eventos.
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:

Código (versionesVB menos recientes): Código (versiones VB más recientes):

Option Explicit Option Explicit On

Public Class Form1


Private Sub Command1_MouseMove(Button As Private Sub Button1_MouseMove(ByVal sender As Object,
Integer, Shift As Integer, X As Single, Y As Single) ByVal e As System.Windows.Forms.MouseEventArgs) Handles
Label1.Caption = Label1.Caption & "Hola... " Button1.MouseMove
Label1.Text = Label1.Text & "Hola... "
End Sub End Sub
End Class

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:

Código (versionesVB menos recientes): Código (versiones VB más recientes):

Option Explicit Option Explicit On

Public Class Form1


Private Sub Command1_Click() Private Sub Button1_Click(ByVal sender As Object,
Label1.Caption = Label1.Caption & "Hola... " ByVal e As System.EventArgs) Handles Button1.Click
End Sub Label1.Text = Label1.Text & "Hola... "
End Sub
End Class
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:
 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".
 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…”) :

Código (versiones VB más recientes):


Código (versionesVB menos recientes):

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.

Ejercicios ejemplos resueltos Visual Basic con


Labels, Textbox, y Buttons (Command Buttons)
EJERCICIOS CON MOSTRAR, PEDIR Y BOTONES EN VISUAL BASIC

EJERCICIO EJEMPLO PRIMERO

Transformar el algoritmo que se indica a continuación, relativo a calculo de necesidades de combustible,


en un programa de Visual Basic.

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

SOLUCIÓN EJERCICIO EJEMPLO PRIMERO

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

REM Contenido del formulario


Rem Contenido del formulario Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs) Handles
Form1.Caption = "Cálculo de necesidades MyBase.Load
combustible" Me.Text = "Cálculo de necesidades combustible"
Label1.Text = "Por favor introduzca estos datos"
Label1(0) = "Por favor introduzca estos datos" Label2.Text = "Número de turismos"
Label1(1) = "Número de turismos" Label3.Text = "Número de todoterrenos" Label4.Text =
Label1(2) = "Número de todoterrenos" Label1(3) = "Capacidad de turismos (litros)" Label5.Text =
"Capacidad de turismos (litros)" Label1(4) = "Capacidad de todoterrenos (litros)" Button1.Text =
"Capacidad de todoterrenos (litros)" "Aceptar"
End Sub
Command1.Caption = "Aceptar"
End Sub REM Cálculo y muestra resultados
Private Sub Button1_Click(ByVal sender As
Rem Cálculo y muestra resultados System.Object, ByVal e As System.EventArgs) Handles
Private Sub Command1_Click() Button1.Click
Label6.ForeColor = Color.Black
Label2.ForeColor = vbBlack Label6.Font = New Font("Arial", 10,
Label2.FontBold = True FontStyle.Bold)
Turismos = Val(Text1(0)) Turismos = Val(TextBox1.Text) Todoterrenos =
Todoterrenos = Val(Text1(1)) Val(TextBox2.Text) Capturismos =
Val(TextBox3.Text) Captodot =
Capturismos = Val(Text1(2))
Val(TextBox4.Text) Necesidadescom = Turismos
Captodot = Val(Text1(3)) * Capturismos +
Necesidadescom = Turismos * Capturismos + Todoterrenos * Captodot
Todoterrenos * Captodot Label6.Text = "Las necesidades totales de
Label2 = "Las necesidades totales de combustible son combustible son de " & Necesidadescom & " litros"
End Sub End
de " & Necesidadescom & " litros"
Class
End Sub

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

SOLUCIÓN EJERCICIO EJEMPLO SEGUNDO

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

Rem Contenido del formulario REM Contenido del formulario


Private Sub Form_Load() Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Form1.Caption = "Cálculo volumen cilindro" MyBase.Load
ButtonCalcular.Caption = "Calcular Volumen" Me.Text = "Cálculo volumen cilindro" ButtonCalcular.Text
Label1.Caption = "Introduzca aquí el diámetro, en = "Calcular Volumen" Label1.Text = "Introduzca aquí el
diámetro, en metros"
metros"
Label2.Text = "Introduzca aquí la altura, en metros" End
Label2.Caption = "Introduzca aquí la altura, en Sub
metros"
End Sub REM Cálculo y muestra resultados
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Rem Cálculo y muestra resultados ButtonCalcular.Click
Private Sub ButtonCalcular_Click() R = Val(TextBox1.Text) / 2 H =
R = Val(Text1) / 2 H Val(TextBox2.Text)
V = Pi * (R ^ 2) * H
= Val(Text2) LabelResultados.Font = New Font("Arial", 10,
V = Pi * (R ^ 2) * H FontStyle.Bold)
LabelResultados.FontSize = 10 LabelResultados.TextAlign =
ContentAlignment.MiddleCenter
LabelResultados.FontBold = True
LabelResultados.Text = "El volumen del
LabelResultados.Alignment = 2 cilindro es de " & V & " metros cúbicos"
LabelResultados = "El volumen del cilindro es de " & End Sub End
V & " metros cúbicos" Class
End Sub

El resultado gráfico será similar a este:


EJERCICIO EJEMPLO TERCERO

Transformar en código el pseudocódigo que se indica a continuación, relativo a proporcionar el precio


medio de un producto, calculado a partir del precio del mismo en tres establecimientos distintos.

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

SOLUCIÓN EJERCICIO EJEMPLO TERCERO

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í:

Código (versionesVB menos recientes): Código (versiones VB más recientes):

Option Explicit Option Explicit On


Public Class Form1
Rem Declaración de variables
REM Declaración de variables
Dim Precio1!, Precio2!, Precio3!, Media As Single Dim Precio1, Precio2, Precio3, Media As Single

Rem Contenido del formulario REM Contenido del formulario


Private Sub Form1_Load(ByVal sender As
Private Sub Form_Load() System.Object, ByVal e As System.EventArgs) Handles
Form1.Caption = "Cálculo precio medio producto" MyBase.Load
ButtonCalcular.Caption = "Calcular precio medio" Me.Text = "Cálculo precio medio producto"
Label1.Caption = "Introduzca aquí el precio en ButtonCalcular.Text = "Calcular precio
medion"
establecimiento nº1, en euros" Label1.Text = "Introduzca aquí el precio en
Label2.Caption = "Introduzca aquí el precio en establecimiento nº1, en euros"
establecimiento nº2, en euros" Label3.Caption = Label2.Text = "Introduzca aquí el precio en
establecimiento nº2, en euros"
"Introduzca aquí el precio en establecimiento
Label3.Text = "Introduzca aquí el precio en
nº3, en euros" establecimiento nº3, en euros"
End Sub End Sub

REM Cálculo y muestra resultados


Rem Cálculo y muestra resultados Private Sub Button1_Click(ByVal sender As
Private Sub ButtonCalcular_Click() System.Object, ByVal e As System.EventArgs) Handles
Precio1 = Val(Text1) ButtonCalcular.Click
Precio2 = Val(Text2) Precio1 = Val(TextBox1.Text)
Precio2 = Val(TextBox2.Text)
Precio3 = Val(Text3) Precio3 = Val(TextBox3.Text)
Media = (Precio1 + Precio2 + Precio3) / 3 Media = (Precio1 + Precio2 + Precio3) / 3
LabelResultados.FontSize = 10 LabelResultados.Font = New Font("Arial", 10,
FontStyle.Bold) LabelResultados.TextAlign
LabelResultados.FontBold = True
=
LabelResultados.Alignment = 2 ContentAlignment.MiddleCenter
LabelResultados = "El precio medio del producto es LabelResultados.Text = "El precio medio del
de " & Media & " euros" producto es de " & Media & " euros"
End Sub End
End Sub
Class
Para los controles podríamos haber usado arrays de controles si hubiéramos querido. Hemos usado
controles independientes tipo Label1, Label2, Label3 y Text1, Text2 y Text3 en vez de arrays de controles.
Si bien en líneas generales es ventajoso el uso de arrays cuando necesitamos automatizar procesos, para
aplicaciones tan sencillas como ésta no tiene trascendencia hacerlo de una u otra manera.
El resultado gráfico será similar a este:
If Then Else con Visual Basic (condicionales).
Sintaxis de bloque o línea. Ejemplos resueltos
IF … THEN (SI … ENTONCES) E IF … THEN … ELSE (SI … ENTONCES … SINO)

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

Sintaxis en una sola línea:

If [condición] Then Instrucción 1 Else Instrucción A

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")
End If
También válido es:

If A > 7 And B < 5 Then MsgBox ("A es mayor que 7 y B menor que 5")

Si introducimos una cláusula Else el modelo es:

If A > 7 And B < 5 Then


MsgBox ("A es mayor que 7 y B menor que 5")
Else
MsgBox ("A no es mayor que 7 ó B no es menor que 5")
End If

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") _

Else MsgBox "A no es mayor que 7 ó B no es 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:

Programa 1 (versiones más recientes VB):


Programa 1 (versiones menos recientes VB):

Option Explicit On
Option Explicit Public Class Form1 Dim
Dim a% a%

Private Sub Form1_Load(ByVal sender As


Private Sub Form_Load() System.Object, ByVal e As System.EventArgs) Handles
a=3 MyBase.Load
If a = 5 Then a = 3
If a = 5 Then
MsgBox("Se cumple que a vale 5")
MsgBox("Se cumple que a vale 5") End
End If If
a = 25 a = 25
MsgBox("El valor actual de a es " & a) MsgBox("El valor actual de a es " & a) End
Sub
End Sub
End Class
Programa 2 (versiones menos recientes VB): Programa 2 (versiones más recientes VB):

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.

Ejercicios ejemplos con if then else y operador


mod en Visual Basic. Par o impar, ecuación de
segundo grado, etc.
EJERCICIO EJEMPLO CON IF THEN ELSE EN VISUAL BASIC

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):

Option Explicit Option Explicit On


Dim Num As Integer Public Class Form1 Dim Num
As Integer Dim Res As
Dim Res As Integer Integer
Private Sub Form_Load() Private Sub Form1_Load(ByVal sender As
Form1.Caption = "Determina naturaleza par o impar" System.Object, ByVal e As System.EventArgs)
ButtonHallar.Caption = "Determinar" Handles MyBase.Load
Me.Text = "Determina naturaleza par o impar"
LabelPideNum = "Introduzca un nº entero" ButtonHallar.Text = "Determinar"
End Sub LabelPideNum.Text = "Introduzca un nº entero"
Private Sub ButtonHallar_Click() End Sub
Num = Val(TextNentero)
Private Sub ButtonHallar_Click(ByVal sender As
Res = Num Mod 2 System.Object, ByVal e As System.EventArgs)
LabelResultado.FontSize = 10 Handles ButtonHallar.Click
LabelResultado.FontBold = True Num = Val(TextNentero.Text) Res
= Num Mod 2
If Res = 0 Then
LabelResultado.Font = New Font("Arial",
LabelResultado = "El número es par" 10, FontStyle.Bold)
Else If Res = 0 Then
LabelResultado = "El número es impar" LabelResultado.Text = "El número es par"
Else
End If
LabelResultado.Text = "El número es impar"
End Sub End If
End Sub
End Class

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.

CÓDIGO (PARA VERSIONES DE VISUAL BASIC MÁS RECIENTES)

Option Explicit On
Public Class Form1
REM Declaración de variables
Dim aNumber, bNumber, cNumber, dNumber, eNumber As Single

REM Contenido del formulario


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Me.Text = "Ecuación cuadrática"
ButtonCalcular.Text = "Calcular x"
LabelTítulo.Text = "Parámetros a, b y c para ecuación tipo a*x^2 + b*x + c = 0"

End Sub

REM Cálculo y muestra de resultados


Private Sub ButtonHallar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonCalcular.Click
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
aNumber = Val(Texta.Text)
bNumber = Val(Textb.Text)
cNumber = Val(Textc.Text)
dNumber = bNumber ^ 2 - 4 * aNumber * cNumber
eNumber = 2 * aNumber

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.

CÓDIGO (PARA VERSIONES DE VISUAL BASIC MENOS RECIENTES)

Option Explicit
Rem Declaración de variables
Dim a!, b!, c!, d!, e As Single

Rem Contenido del formulario


Private Sub Form_Load()
Form1.Caption = "Ecuación cuadrática"
CommandCalcular.Caption = "Calcular x"
LabelTítulo = "Parámetros a, b y c para ecuación tipo a*x^2 + b*x + c = 0"
Labela.Caption = "Valor parámetro a"
Labelb.Caption = "Valor parámetro b"
Labelc.Caption = "Valor parámetro c"
End Sub

Rem Cálculo y muestra de resultados


Private Sub CommandCalcular_Click()
LabelResultado.FontSize = 10
LabelResultado.FontBold = True a =
Val(Texta)
b = Val(Textb)
c = Val(Textc)
d=b^2-4*a*ce=2
*a
If d = 0 Then
LabelResultado = "x1 = x2 = " & - b / e
Else
If d > 0 Then
LabelResultado = "x1 = " & (-b + Sqr(d)) / e
LabelResultado = LabelResultado & vbCrLf & "x2 = " & (-b - Sqr(d)) / e
Else
LabelResultado = "x1 = " & -b / e & " + " & Sqr(-d) / e & " * i"
LabelResultado = LabelResultado & vbCrLf & "x2 = " & -b / e & " - " & Sqr(-d) / e & " * i"
End If
End If
End Sub

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

Reflexiona sobre el significado y prueba los siguientes códigos en tu ordenador:

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):

Option Explicit Option Explicit On


Dim A% Public Class Form1 Dim A
As Integer

Private Sub Form_Load() Private Sub Form1_Load(ByVal sender As


A = 160 System.Object, ByVal e As System.EventArgs)
If A > 50 And A < 75 Then Handles MyBase.Load
MsgBox ("Arabia") A = 160
If A > 50 And A < 75 Then
Else MsgBox("Arabia")
MsgBox ("Eusebio") Else
End If MsgBox("Eusebio") End
If
End Sub End Sub End
Class

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 sintaxis a emplear con Visual Basic es la siguiente:

Select Case [expresión]


Case [valor expresión 1]
Instrucción 1
Instrucción 2
Case [valor expresión 2]
Instrucción 3
Instrucción 4
.
.
.
Case [valor expresión n]
Instrucción k
Case Else Instrucción
m
End Select

Select Case en Visual Basic equivale a la instrucción switch de otros lenguajes.

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):

[Cálculo del día del año] Option Explicit On


Public Class Form1
Option Explicit Dim Ndía, Nmes, DDA As Integer
Dim Ndía%, Nmes%, DDA As Integer
Private Sub Form_Load() Private Sub Form1_Load(ByVal sender As
Form1.Caption = "Cálculo día del año" Label1.Caption = System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
"Introduzca aquí el número del día"
Me.Text = "Cálculo día del año" Label1.Text =
"Introduzca aquí el número
Label2.Caption = "Introduzca aquí el número del mes" del día"
Label2.Text = "Introduzca aquí el número
ButtonCalcular.Caption = "Determinar día del año" del mes"
ButtonCalcular.Text = "Determinar día del
año"
End Sub End Sub
Private Sub ButtonCalcular_Click()
Ndía = Val(Text1) Private Sub ButtonCalcular_Click(ByVal sender As
Nmes = Val(Text2) System.Object, ByVal e As System.EventArgs) Handles
ButtonCalcular.Click
LabelResultado.FontSize = 10
Ndía = Val(Text1.Text)
LabelResultado.FontBold = True Nmes = Val(Text2.Text) LabelResultado.Font =
If Ndía >= 1 And Ndía <= 31 And Nmes >= 1 And New Font("Arial",
Nmes <= 12 Then 10, FontStyle.Bold)
Select Case Nmes If Ndía >= 1 And Ndía <= 31 And Nmes >= 1
And Nmes <= 12 Then
Case 1
Select Case Nmes
DDA = Ndía '[DDA es día del año] Case 1
Case 2 DDA = Ndía '[DDA es día del
DDA = Ndía + 31 año]
Case 3 Case 2
DDA = Ndía + 31
DDA = Ndía + 59 Case 3
Case 4 DDA = Ndía + 59
DDA = Ndía + 90 Case 4
Case 5 DDA = Ndía + 90
DDA = Ndía + 120 Case 5
DDA = Ndía + 120
Case 6 Case 6
DDA = Ndía + 151 DDA = Ndía + 151
Case 7 Case 7
DDA = Ndía + 181 DDA = Ndía + 181
Case 8 Case 8
DDA = Ndía + 212
DDA = Ndía + 212 Case 9
Case 9 DDA = Ndía + 243
DDA = Ndía + 243 Case 10
Case 10 DDA = Ndía + 273
Case 11
DDA = Ndía + 273
DDA = Ndía + 304
Case 11 Case 12
DDA = Ndía + 304 DDA = Ndía + 334
Case 12 End Select
DDA = Ndía + 334 LabelResultado.Text = "El " & Ndía & "
del " & Nmes & " es el día " & DDA & " del año"
End Select
Else
LabelResultado = "El " & Ndía & " del " & Nmes & " LabelResultado.Text = "Datos
es el día " & DDA & " del año" proporcionados no válidos"
Else End If
LabelResultado = "Datos proporcionados no End Sub
End Class
válidos"
End If
End Sub
Aspecto gráfico:

Bucles For Next Step, Do While Loop, Do Loop


While (Estructuras de repetición en Visual
Basic)
ESTRUCTURAS DE REPETICIÓN (BUCLES) CON VISUAL BASIC

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)

La sintaxis a emplear con Visual Basic es la siguiente:

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):

Option Explicit Option Explicit On


Public Class Form1
Dim Num As Integer
Dim i As Integer Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Private Sub Form_Load() Handles MyBase.Load
Form1.Caption = "Enteros" Dim Num As Integer
Dim i As Integer
Num = Val(InputBox("Introduzca un número entero Me.Text = "Enteros"
comprendido entre 1 y 99", "¿Número?")) Num = Val(InputBox("Introduzca un número
LabelTabla.Alignment = 2 LabelTabla.FontBold = True entero comprendido entre 1 y 99", "¿Número?"))
LabelTabla = "ENTEROS ENTRE " & Num & " y 100" LabelTabla.TextAlign =
& vbCrLf & vbCrLf ContentAlignment.MiddleCenter
LabelTabla.Font = New Font("Arial", 10,
For i = Num To 100 FontStyle.Bold)
LabelTabla = LabelTabla & i & " " LabelTabla.Text = "ENTEROS ENTRE " & Num
Next i h) " y 100" & vbCrLf & vbCrLf For
End Sub i = Num To 100
LabelTabla.Text = LabelTabla.Text & i
i)" "
Next i
End Sub
End Class
Gráficamente:

INSTRUCCIÓN MIENTRAS ... HACER (DO WHILE ... LOOP)

La sintaxis que hemos de seguir es la siguiente:

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)

La sintaxis a utilizar es:

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,

sabiendo que disponemos de otra equivalente.

También podría gustarte