Codificación aprenderaprogramar.com: CU00336A
MODIFICACIÓN DIRECTA DEL FLUJO DE PROGRAMAS CON VISUAL BASIC.
Las recomendaciones para el uso de instrucciones de control directo del flujo de programas se resumen en una palabra: prudencia. Si no tienes cuidado con el uso de instrucciones que modifican el curso natural de los programas, puedes ocasionar el mal funcionamiento de los mismos o comprobar que has generado un código de poca calidad y difícil seguimiento.
INSTRUCCIÓN FINALIZAR. END, UNLOAD, CLOSE.ME, EXIT SUB.
Con Visual Basic disponemos de distintas variantes relacionadas con Finalizar.
a) End: instrucción que da lugar a la detención instantánea de un programa. No se recomienda cerrar un programa directamente a través de End, ya que hay instrucciones previstas para un cierre normal. Podríamos considerar que End supone "apagar" el programa como si hubiera un corte de energía eléctrica, mientras que la descarga del programa equivale al cierre de un sistema operativo a través de la opción "Cerrar". Para la finalización normal de un programa de Visual Basic debemos descargar todos los formularios con que estemos trabajando (lo cual supone que se produzcan los eventos QueryUnload y Unload) antes de disponer la instrucción End.
b) Unload ó Close (según versiones): instrucción que da lugar a la descarga de la memoria de formularios o controles, lo cual no necesariamente significa que el programa acabe, ya que el código asociado al módulo del formulario permanece en memoria y pueden mostrarse otro tipo de ventanas o incluso volver a cargarse el formulario si así está establecido en el código.
c) Exit Sub: da lugar a que se salga del procedimiento que se está ejecutando, continuando el flujo del programa como si se hubiera llegado al final del procedimiento.
Veamos ejemplos de código:
a) Código asociado a un botón que da lugar al cierre del programa.
Código (versiones VB menos recientes) | Código (versiones VB más recientes) |
'Curso VB aprenderaprogramar.com Private Sub ButtonCerrar_Click() MsgBox("Se va a cerrar el formulario y el programa") Unload Form1 End End Sub |
REM Curso VB aprenderaprogramar.com Public Class Form1 Private Sub ButtonCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Se va a cerrar el formulario y el programa") Me.Close() End End Sub End Class |
b) Código que da lugar a la salida de un procedimiento
Código (versiones VB menos recientes) | Código (versiones VB más recientes) |
‘Curso VB aprenderaprogramar.com‘ Private Sub ButtonCerrar_Click() Dim condición As Integer condición = MsgBox("¿Desea continuar?", vbYesNo) If condición = vbNo Then Exit Sub MsgBox("Ha elegido continuar") End Sub |
REM Curso VB aprenderaprogramar.com Public Class Form1 Private Sub ButtonCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim condición As Integer condición = MsgBox("¿Desea continuar?", vbYesNo) If condición = vbNo Then Exit Sub MsgBox("Ha elegido continuar") End Sub End Class |
En el primer ejemplo, se muestra un mensaje y se cierra el programa. En el segundo código, si el usuario elige que desea continuar se muestra el mensaje "Ha elegido continuar" y prosigue la ejecución del módulo. Si elige que no desea continuar se ejecuta Exit Sub. Se produce el salto a la última línea del procedimiento (End Sub) y el flujo del programa continua por donde proceda.
EJERCICIO
Crear un programa en Visual Basic a partir del siguiente pseudocódigo, que constituye un ejemplo de aplicación de la Instrucción Finalizar.
1. Inicio [Finaliza si hay problemas. Curso Visual Basic aprenderaprogramar.com] 2. Mientras Numero < 100 ó Numero > 200 Hacer Mostrar “Por favor, introduzca un número comprendido entre 100 y 200” Pedir Numero i = i + 1 Si i > 19 Entonces Mostrar “Hay un problema para continuar y el programa se va a cerrar. Motivo: 20 procesos nulos. Consulte el manual del programa” Finalizar FinSi Repetir 3. Mostrar “Gracias por introducir una entrada válida” 4. [Aquí continuaría el programa con diferentes procesos] 5. Fin |
SOLUCIÓN
Código (versiones VB menos recientes) | Código (versiones VB más recientes) |
'[Curso VB aprenderaprogramar.com] Option Explicit Dim i As Integer Dim Número As Single Private Sub Form_Load() Show Form1.Caption = "Ejemplo Finalizar" Do While Número < 100 Or Número > 200 Número = InputBox("Introduzca un número comprendido entre 100 y 200") i = i + 1 If i > 19 Then MsgBox("Hay un problema para continuar y el programa se va a cerrar. Motivo: 20 procesos nulos. Consulte el manual del programa") Unload Form1 End End If Loop Label1 = "Gracias por introducir una entrada válida" '[Aquí continuaría el programa con diferentes procesos] End Sub |
REM Curso VB aprenderaprogramar.com Option Explicit On Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Dim Número As Single Me.Text = "Ejemplo Finalizar" Do While Número < 100 Or Número > 200 Número = InputBox("Introduzca un número comprendido entre 100 y 200") i = i + 1 If i > 19 Then MsgBox("Hay un problema para continuar y el programa se va a cerrar. Motivo: 20 procesos nulos. Consulte el manual del programa") Me.Close() End End If Loop Label1.Text = "Gracias por introducir una entrada válida" '[Aquí continuaría el programa con diferentes procesos] End Sub End Class |