10.1. Más posibilidades de la "consola"
En "Console" hay mucho más que ReadLine y WriteLine, aunque quizá no todas las posibilidades estén contempladas en implementaciones "alternativas", como las primeras versiones de Mono. Vamos a ver algunas de las posibilidades que nos pueden resultar más útiles:
- Clear: borra la pantalla.
- ForegroundColor: cambia el color de primer plano (para indicar los colores, hay definidas constantes como "ConsoleColor.Black"", que se detallan al final de este apartado).
- BackgroundColor: cambia el color de fondo (para el texto que se escriba a partir de entonces; si se quiere borrar la pantalla con un cierto color, se deberá primero cambiar el color de fondo y después usar "Clear")
- SetCursorPosition(x, y): cambia la posición del cursor ("x" se empieza a contar desde el margen izquierdo, e "y" desde la parte superior de la pantalla).
- Readkey(interceptar): lee una tecla desde teclado. El parámetro "interceptar" es un "bool", y es opcional. Indica si se debe capturar la tecla sin permitir que se vea en pantalla ("true" para que no se vea, "false" para que se pueda ver). Si no se indica este parámetro, la tecla se muestra en pantalla.
- KeyAvailable: indica si hay alguna tecla disponible para ser leída (es un "bool")
- Title: el título que se va a mostrar en la consola (es un "string")
/*---------------------------*/ /* Ejemplo en C# */ /* consola.cs */ /* */ /* Más posibilidades de */ /* "System.Console" */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; public class consola { public static void Main() { int posX, posY; Console.Title = "Ejemplo de consola"; Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); posY = 10; // En la fila 10 Random r = new Random(DateTime.Now.Millisecond); posX = r.Next(20, 40); // Columna al azar entre 20 y 40 Console.SetCursorPosition(posX, posY); Console.WriteLine("Bienvenido"); Console.ForegroundColor = ConsoleColor.Blue; Console.SetCursorPosition(10, 15); Console.Write("Pulsa 1 o 2: "); ConsoleKeyInfo tecla; do { tecla = Console.ReadKey(false); } while ((tecla.KeyChar != '1') && (tecla.KeyChar != '2')); int maxY = Console.WindowHeight; int maxX = Console.WindowWidth; Console.SetCursorPosition(maxX-50, maxY-1); Console.ForegroundColor = ConsoleColor.Red; Console.Write("Pulsa una tecla para terminar... "); Console.ReadKey(true); } }
(Nota: si se prueba este fuente desde Mono, habrá que compilar con "gmcs" en vez de con "mcs", para compilar usando la versión 2.x de la plataforma .Net, no la 1.x, que no tenía estas posibilidades).
Para comprobar el valor de una tecla, como se ve en el ejemplo anterior, tenemos que usar una variable de tipo "ConsoleKeyInfo" (información de tecla de consola). Un ConsoleKeyInfo tiene campos como:
- KeyChar, que representa el carácter que se escribiría al pulsar esa tecla. Por ejemplo, podríamos hacer if (tecla.KeyChar == '1') ...
- Key, que se refiere a la tecla (porque hay teclas que no tienen un carácter visualizable, como F1 o las teclas de cursor). Por ejemplo, para comprobar la tecla ESC podríamos hacer if (tecla.Key == ConsoleKey.Escape) ... . Algunos de los códigos de tecla disponibles son:
-
- Teclas de edición y control como, como: Backspace (Tecla RETROCESO), Tab (Tecla TAB), Clear (Tecla BORRAR), Enter (Tecla ENTRAR), Pause (Tecla PAUSA), Escape (Tecla ESC (ESCAPE)), Spacebar (Tecla BARRA ESPACIADORA), PrintScreen (Tecla IMPR PANT), Insert (Tecla INS (INSERT)), Delete (Tecla SUPR (SUPRIMIR)).
- Teclas de movimiento del cursor, como: PageUp (Tecla RE PÁG), PageDown (Tecla AV PÁG), End (Tecla FIN), Home (Tecla INICIO), LeftArrow (Tecla FLECHA IZQUIERDA), UpArrow (Tecla FLECHA ARRIBA), RightArrow (Tecla FLECHA DERECHA), DownArrow (Tecla FLECHA ABAJO),
- Teclas alfabéticas, como: A (Tecla A), B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.
- Teclas numéricas, como: D0 (Tecla 0), D1, D2, D3, D4, D5, D6, D7, D8, D9.
- Teclado numérico adicional: NumPad0 (Tecla 0 del teclado numérico), NumPad1, NumPad2, NumPad3, NumPad4, NumPad5, NumPad6, NumPad7, NumPad8, NumPad9, Multiply (Tecla Multiplicación), Add (Tecla Agregar), Separator (Tecla Separador), Subtract (Tecla Resta), Decimal (Tecla Decimal), Divide (Tecla División).
- Sleep (Tecla Espera del equipo),
- Teclas de función: F1, F2 y sucesivas (hasta F24).
- Teclas especiales de Windows: LeftWindows (Tecla izquierda con el logotipo de Windows), RightWindows (Tecla derecha con el logotipo de Windows),
- Incluso teclas multimedia, si el teclado las incorpora, como: VolumeMute (Tecla Silenciar el volumen, enMicrosoft Natural Keyboard, bajo Windows 2000 o posterior), VolumeDown (Bajar el volumen, ídem), VolumeUp (Subir el volumen), MediaNext (Tecla Siguiente pista de multimedia), etc.
- Modifiers, que permite comprobar si se han pulsado simultáneamente teclas modificadoras: Alt, Shift o Control. Un ejemplo de su uso sería:
Los colores que tenemos disponibles (y que se deben escribir precedidos con "ConsoleColor") son: Black (negro), DarkBlue (azul marino), DarkGreen (verde oscuro) DarkCyan (verde azulado oscuro), DarkRed (rojo oscuro), DarkMagenta (fucsia oscuro o púrpura), DarkYellow (amarillo oscuro u ocre), Gray (gris), DarkGray (gris oscuro), Blue (azul), Green (verde), Cyan (aguamarina o verde azulado claro), Red (rojo), Magenta (fucsia), Yellow (amarillo), White (blanco).
if ((tecla.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("Has pulsado Alt");