Codificación aprenderaprogramar.com: CU00325A
INSTRUCCIÓN SEGÚN (CASO) HACER (SELECT CASE)
La sintaxis a emplear con Visual Basic es la que indicamos a continuación. Como se podrá comprobar, mediante esta instrucción establecemos una serie de casos que se podrían cumplir para el valor de una expresión o variable, y en función del valor de la variable se ejecutarán una serie de instrucciones asociadas u otra.
Select Case [expresión]
Case [valor expresión 1] 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 (versionesVB menos recientes) | Código (versiones VB más recientes) |
Rem Curso Visual Basic aprenderaprogramar.com Option Explicit Dim A As Integer Private Sub Form_Load() A = 12 Select Case A Case 12 MsgBox ("A vale 12") Case Is < 14 MsgBox ("A es menor que 14") Case 160 To 200 MsgBox ("A está comprendida entre 160 y 200") Case Else MsgBox ("No se ha verificado ninguna de las condiciones previstas") End Select End Sub |
REM Curso Visual Basic aprenderaprogramar.com Option Explicit On Public Class Form1 Dim A As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load A = 12 Select Case A Case 12 MsgBox("A vale 12") Case Is < 14 MsgBox("A es menor que 14") Case 160 To 200 MsgBox("A está comprendida entre 160 y 200") Case Else MsgBox("No se ha verificado ninguna de las condiciones previstas") End Select End 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 (versionesVB menos recientes) | Código (versiones VB más recientes) |
Rem Curso Visual Basic aprenderaprogramar.com Rem [Cálculo del día del año] Option Explicit Dim Ndía%, Nmes%, DDA As Integer Private Sub Form_Load() Form1.Caption = "Cálculo día del año" Label1.Caption = "Introduzca aquí el número del día" Label2.Caption = "Introduzca aquí el número del mes" ButtonCalcular.Caption = "Determinar día del año" End Sub Private Sub ButtonCalcular_Click() Ndía = Val(Text1) Nmes = Val(Text2) LabelResultado.FontSize = 10 LabelResultado.FontBold = True If Ndía >= 1 And Ndía <= 31 And Nmes >= 1 And Nmes <= 12 Then Select Case Nmes Case 1 DDA = Ndía '[DDA es día del año] Case 2 DDA = Ndía + 31 Case 3 DDA = Ndía + 59 Case 4 DDA = Ndía + 90 Case 5 DDA = Ndía + 120 Case 6 DDA = Ndía + 151 Case 7 DDA = Ndía + 181 Case 8 DDA = Ndía + 212 Case 9 DDA = Ndía + 243 Case 10 DDA = Ndía + 273 Case 11 DDA = Ndía + 304 Case 12 DDA = Ndía + 334 End Select LabelResultado = "El " & Ndía & " del " & Nmes & " es el día " & DDA & " del año" Else LabelResultado = "Datos proporcionados no válidos" End If End Sub |
REM Curso Visual Basic aprenderaprogramar.com Option Explicit On Public Class Form1 Dim Ndía, Nmes, DDA As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "Cálculo día del año" Label1.Text = "Introduzca aquí el número del día" Label2.Text = "Introduzca aquí el número del mes" ButtonCalcular.Text = "Determinar día del año" End Sub Private Sub ButtonCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcular.Click Ndía = Val(Text1.Text) Nmes = Val(Text2.Text) LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold) If Ndía >= 1 And Ndía <= 31 And Nmes >= 1 And Nmes <= 12 Then Select Case Nmes Case 1 DDA = Ndía '[DDA es día del año] Case 2 DDA = Ndía + 31 Case 3 DDA = Ndía + 59 Case 4 DDA = Ndía + 90 Case 5 DDA = Ndía + 120 Case 6 DDA = Ndía + 151 Case 7 DDA = Ndía + 181 Case 8 DDA = Ndía + 212 Case 9 DDA = Ndía + 243 Case 10 DDA = Ndía + 273 Case 11 DDA = Ndía + 304 Case 12 DDA = Ndía + 334 End Select LabelResultado.Text = "El " & Ndía & " del " & Nmes & " es el día " & DDA & " del año" Else LabelResultado.Text = "Datos proporcionados no válidos" End If End Sub End Class |
Aspecto gráfico: