Hacer que un programa elija entre dos posibilidades: la instrucción If...Then En esta lección, aprenderá a utilizar la instrucción If...Then para ejecutar el código basado en condiciones. Los programas deben realizar diferentes acciones en respuesta a distintas condiciones. Por ejemplo, quizá desee que el programa compruebe qué día de la semana es y haga algo diferente dependiendo del día. La instrucción If...Then permite evaluar una condición y ejecutar las diferentes secciones de código basándose en los resultados de esa condición. El siguiente ejemplo muestra cómo funciona la instrucción If...Then. VB C# C++ F# JScript Copiar If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Monday Then MsgBox("Today is Monday!") End If Cuando se ejecuta este código, se evalúa la condición (la parte entre If y Then). Si la condición es true, se ejecuta la siguiente línea de código y se muestra un cuadro de mensaje; si es false, el código pasa a la línea End If. En otras palabras, el código estipula "Si hoy es lunes, muestre el mensaje". Inténtelo Para utilizar la instrucción If...Then 1. En el menú Archivo, seleccione Nuevo proyecto. 2. En el cuadro de diálogo Nuevo proyecto, en el panel Plantillas, haga clic en Aplicación para Windows. 3. En el cuadro Nombre, escriba IfThen y haga clic en Aceptar. Se abre un nuevo proyecto de formularios Windows Forms. 4. Haga doble clic en el formulario para abrir el Editor de código. 5. En el controlador de eventos Form1_Load, escriba el siguiente código. VB C# C++ F# JScript Copiar If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Saturday Or _ My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Sunday Then MsgBox("Happy Weekend!") End If 6. Presione F5 para ejecutar el programa. Si hoy es sábado o domingo, aparecerá un cuadro de mensaje indicándole Happy Weekend!. De lo contrario, no aparecerá ningún cuadro de mensaje. 7. En el menú Depurar, seleccione Detener depuración para finalizar el programa. Mantenga abierto este proyecto. Se utilizará en el siguiente procedimiento, "Para utilizar la cláusula Else". Es posible que haya observado en el ejemplo anterior que la instrucción If...Then utilizó el operador Or para evaluar varias condiciones ("Si es sábado Or si es domingo"). Puede utilizar los operadores Or y And para evaluar tantas condiciones como desee en una instrucción If...Then única. La cláusula Else Ha visto cómo utilizar la instrucción If...Then para ejecutar el código si una condición es true, pero ¿qué pasa si desea ejecutar un código si una condición es true, pero otro si es false? En este caso, puede utilizar la cláusula Else. La cláusula Else le permite especificar un bloque de códigos que se ejecutará si la condición es false. El siguiente ejemplo muestra cómo funciona la cláusula Else. VB C# C++ F# JScript Copiar If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Friday Then MsgBox("Today is Friday!") Else MsgBox("It isn't Friday yet!") End If En este ejemplo, se evalúa la expresión; si es true, se ejecuta la siguiente línea de código y se muestra el primer cuadro de mensaje. Si es false, el código se desplaza a la cláusula Else y se ejecuta la línea Else siguiente, que muestra el segundo cuadro de mensaje. Inténtelo Para utilizar la cláusula Else 1. Cambie el código en la instrucción If...Then de la siguiente forma. VB C# C++ F# JScript Copiar If My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Saturday Or _ My.Computer.Clock.LocalTime.DayOfWeek = DayOfWeek.Sunday Then MsgBox("Happy Weekend!") Else MsgBox("Happy Weekday! Don't work too hard!") End If 2. Presione F5 para ejecutar el programa. El programa mostrará ahora un cuadro de mensaje que indica si es un fin de semana o un día de la semana, con contenido adecuado. Nota Para cambiar el día de la semana haga doble clic en la hora en la barra de tareas de Windows, si desea probar la ejecución de los dos bloques de código. (La barra de tareas es la que contiene el botón Inicio de Windows; de manera predeterminada, se encuentra en la parte inferior del escritorio y la hora se muestra en la esquina derecha). Pasos siguientes En esta lección, aprendió a utilizar la instrucción If...Then junto con la cláusula Else para hacer que el programa ejecute selectivamente los bloques de códigos basándose en las condiciones en el tiempo de ejecución. Para la siguiente lección, puede elegir entre examinar cómo seleccionar el código para ejecución y leer Información detallada: utilizar Select Case para decidir entre varias opciones o continuar con la siguiente lección, Qué hacer cuando algo sale mal: control de errores. Vea también Tareas Hacer que un programa repita acciones: establecer bucles For...Next Comparaciones: Utilizar expresiones para comparar valores Referencia Instrucción If...Then...Else (Visual Basic) MsgBox (Función, Visual Basic) Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un entero que indica el botón utilizado. Copiar Public Function MsgBox( _ ByVal Prompt As Object, _ Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OKOnly, _ Optional ByVal Title As Object = Nothing _ ) As MsgBoxResult Parámetros Prompt Obligatorio. Expresión de tipo String que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de Prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si Prompt consta de más de una línea, puede separar las líneas mediante un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una combinación de caracteres de retorno de carro/avance de línea (Chr(13) y Chr(10)) entre cada línea. Buttons Opcional. Expresión numérica que corresponde a la suma de los valores que especifican el número y tipo de botones que se han de mostrar, el estilo de icono que se va a usar, la identificación del botón predeterminado y la modalidad del cuadro de mensaje. Si se omite Buttons, el valor predeterminado será cero. Title Opcional. Expresión de tipo String que se muestra en la barra de título del cuadro de diálogo. Si se omite Title, en la barra de título aparecerá el nombre de la aplicación. Valores En la siguiente tabla se incluyen los valores de enumeración de MsgBoxStyle: Miembro Valor Descripción OKOnly 0 Muestra sólo el botón Aceptar. OKCancel 1 Muestra los botones Aceptar y Cancelar. AbortRetryIgnore 2 Muestra los botones Anular, Reintentar y Omitir. YesNoCancel 3 Muestra los botones Sí, No y Cancelar. YesNo 4 Muestra los botones Sí y No. RetryCancel 5 Muestra los botones Reintentar y Cancelar. Critical 16 Muestra el icono Mensaje crítico. Question 32 Muestra el icono Consulta de advertencia. Exclamation 48 Muestra el icono Mensaje de advertencia. Information 64 Muestra el icono Mensaje de información. DefaultButton1 0 El primer botón es el predeterminado. DefaultButton2 256 El segundo botón es el predeterminado. DefaultButton3 512 El tercer botón es el predeterminado. ApplicationModal 0 Aplicación modal: el usuario debe responder al cuadro de mensaje antes de continuar trabajando en la aplicación actual. SystemModal 4096 Sistema modal: se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensaje. MsgBoxSetForeground 65536 Especifica la ventana del cuadro de mensaje como ventana de primer plano. MsgBoxRight 524288 Texto alineado a la derecha. MsgBoxRtlReading 1048576 Especifica que el texto debe aparecer para ser leído de derecha a izquierda en los sistemas árabe y hebreo. El primer grupo de valores (0-5) describe el número y tipo de botones mostrados en el cuadro de diálogo. El segundo grupo (16, 32, 48, 64) describe el estilo de icono. El tercer grupo (0, 256, 512) determina qué botón es el valor predeterminado. El cuarto grupo (0, 4096) determina la modalidad del cuadro de mensaje y el quinto grupo especifica si el cuadro de mensaje es la ventana de primer plano, junto con la alineación y la dirección del texto. A la hora de sumar números para crear el valor final del argumento Buttons, se deberá utilizar únicamente un número de cada grupo. Valor devuelto Constante Valor OK 1 Cancel 2 Abort 3 Retry 4 Ignore 5 Yes 6 No 7 Excepciones Tipo de excepción Número de Condición error ArgumentException 5 Prompt no es una expresión String o Title no es válido. InvalidOperationException 5 El proceso no se está ejecutando en modo interactivo de usuario. InvalidEnumArgumentException 5 Uno o más parámetros no son miembros de la enumeración MsgBoxResult o MsgBoxStyle. Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo, siempre que sea posible, se debe considerar la sustitución de dicho control de errores por Información general sobre el control estructurado de excepciones de Visual Basic. Comentarios Si el cuadro de diálogo muestra un botón Cancelar, presionar la tecla ESC tendrá el mismo efecto que hacer clic en Cancelar. Si el cuadro de diálogo contiene un botón Ayuda, existe ayuda contextual para ese cuadro de diálogo en concreto. Sin embargo, no se devolverá ningún valor hasta que se haga clic en uno de estos botones. Nota Si desea especificar más que el primer argumento, deberá utilizar la función MsgBox en una expresión. Si omite alguno de los argumentos de posición, deberá conservar el correspondiente delimitador de coma. Nota La función MsgBox requiere UIPermission en el nivel SafeTopLevelWindows, lo que puede afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission. Ejemplo En este ejemplo se utiliza la función MsgBox para mostrar un mensaje de error crítico en un cuadro de diálogo con botones Sí y No. El botón No se considera la respuesta predeterminada. Todo ello se consigue combinando los valores de constante de MsgBox en una expresión numérica. En este caso, si se agrega 4 (la combinación de botones Sí/No) y 16 (la ventana Mensaje crítico) y 256 (el segundo botón como botón predeterminado) se obtiene un total de 276. El valor que devuelve la función MsgBox depende del botón que elija el usuario: Sí devuelve un valor 6; No un valor 7. VB C# C++ F# JScript Copiar Dim msg As String Dim title As String Dim style As MsgBoxStyle Dim response As MsgBoxResult msg = "Do you want to continue?" ' Define message. style = MsgBoxStyle.DefaultButton2 Or _ MsgBoxStyle.Critical Or MsgBoxStyle.YesNo title = "MsgBox Demonstration" ' Define title. ' Display message. response = MsgBox(msg, style, title) If response = MsgBoxResult.Yes Then ' User chose Yes. ' Perform some action. Else ' Perform some other action. End If InputBox (Función, Visual Basic) Muestra un mensaje en un cuadro de diálogo, espera a que el usuario escriba un texto o haga clic en un botón y devuelve una cadena con el contenido del cuadro de texto. Copiar Public Function InputBox( _ ByVal Prompt As String, _ Optional ByVal Title As String Optional ByVal DefaultResponse Optional ByVal Xpos As Integer Optional ByVal YPos As Integer ) As String = "", _ As String = "", _ = -1, _ = -1 _ Parámetros Prompt Requerido. Expresión de tipo String que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de Prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si Prompt incluye más de una línea, puede separar las líneas mediante un carácter de retorno de carro (Chr(13)), un carácter de salto de línea (Chr(10)) o una combinación de retorno de carro y salto de línea (Chr(13) & Chr(10)) que inserta entre cada línea. Title Opcional. Expresión de tipo String que se muestra en la barra de título del cuadro de diálogo. Si se omite Title, en la barra de título aparecerá el nombre de la aplicación. DefaultResponse Opcional. Expresión de tipo String que se muestra en el cuadro de texto como respuesta predeterminada en caso de que no se suministre otra entrada. Si se omite DefaultResponse, el cuadro de texto se mostrará vacío. XPos Opcional. Expresión numérica que especifica, en píxeles, la distancia entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si omite XPos y YPos, el cuadro de diálogo se centra en la pantalla. YPos Opcional. Expresión numérica que especifica, en píxeles, la distancia entre el borde superior del cuadro de diálogo y el borde superior de la pantalla. Si omite XPos y YPos, el cuadro de diálogo se centra en la pantalla. Comentarios Si el usuario hace clic en Cancelar, se devolverá una cadena de longitud cero. Si desea especificar más que el primer argumento, deberá utilizar la función InputBox en una expresión. Si omite alguno de los argumentos de posición, deberá conservar el correspondiente delimitador de coma. Nota La función InputBox requiere un permiso UIPermission del nivel SafeTopLevelWindows que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, vea Solicitar permisos y UIPermission (Clase). Ejemplo En este ejemplo se muestran distintas formas de utilizar la función InputBox para pedir al usuario que especifique un valor. Si se omiten las posiciones x e y, el cuadro de diálogo quedará centrado automáticamente respecto a ambos ejes. La variable MyValue contiene el valor especificado por el usuario al hacer clic en Aceptar o presionar la tecla ENTRAR. VB C# C++ F# JScript Copiar Dim message, title, defaultValue As String Dim myValue As Object ' Set prompt. message = "Enter a value between 1 and 3" ' Set title. title = "InputBox Demo" defaultValue = "1" ' Set default value. ' Display message, title, and default value. myValue = InputBox(message, title, defaultValue) ' If user has clicked Cancel, set myValue to defaultValue If myValue Is "" Then myValue = defaultValue ' Display dialog box at position 100, 100. myValue = InputBox(message, title, defaultValue, 100, 100) ' If user has clicked Cancel, set myValue to defaultValue If myValue Is "" Then myValue = defaultValue La estrutura de control IF permite decidr entre dos opciones resultantes de la evaluación de una sentencia. Si la evaluación es positiva hace una cosa, también podemos especificar accioens para realizar en caso de que la evaluación sea negativa. Veamos cómo funciona en VBscript. IF (expresion) then Sentencias .... END IF Vemos que en primer lugar tenemos la sentencia IF, luego una expresión, que puede o no ir entre paréntesis, y más tarde la parabra THEN. Vemos que luego hay un salto de línea antes de colocar las sentencias asociadas a la evaluación positiva de la sentencia. En VBScript las líneas si que importan. Después de poner las sentencias del asociadas a la evaluación positiva colocamos un END IF, para acabar la estructura del IF. Enunciado ELSE Opcionalmente se puede colocar una serie de sentencias asociadas a la evaluación negativa de la expresión. Estas sentencias se deben colocar después de la orden ELSE y antes del END IF. IF (expresion) then Sentencias .... ELSE Sentencias .... END IF Enunciado ELSEIF En Visual Basic Script existe la posibilidad de utilizar un enunciado especial en el lugar donde utilizaríamos un ELSE. Sirve para encadenar sentencias IF de modo que en un resultado negativo de un IF se pueda evaluar otra expresión, que tendría a su vez otros enunciados THEN y probablemente ELSE u otro ELSEIF. Se vería en un ejemplo com más facilidad: IF (expresion1) then Sentencias1 .... ELSEIF (expresion2) then Sentencias2 .... ELSEIF (expresion3) then Sentencias3 .... ELSE Sentencias4 .... END IF Se evalúa la primera expresión, en caso positivo se ejecutan las sentencias1, en caso negativo se evalua la expresion 2. Si la expresión 2 es positiva se ejecutan las sentencias 2 en caso negativo evaluamos la expresión 3 con el siguiente ELSEIF. Todo acaba en un ELSE en este ejemplo, pero el ELSE final no es obligatorio