Usando el teclado solo las flechas y el Enter, en este programa puedo escribir nombre y se muestra en pantalla. Al escribir un nombre, pulso Enter y correctamente me lleva a la zona de > "Atrás". Si con la flecha derecha o izquierda me tiene que llevar a la parte de > Guardar.
El problema está que tiene que indicar con el caracter > en Guardar, y se ejecuta directamente, cosa que no debe ser. En la zona Atrás y Guardar solo se ejecuta si pulso Enter.
Dejo el código aquí como ejemplo.
Código
using System; namespace LCD_nombre_archivo_consola_03 { class Program { static string guardarNombre = ""; static int coordenadaX = 0; static ConsoleKey key; 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';', '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '}; 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 }; static int index = 0; static void Main(string[] args) { // Título de la pantalla. Console.Title = "Cambiar nombre"; Inicio(); } #region Inico. private static void Inicio() { // Tamaño de la ventana. Console.SetWindowSize(20, 5); // Fondo verde. Console.BackgroundColor = ConsoleColor.Blue; // Letras negras. Console.ForegroundColor = ConsoleColor.White; Console.Clear(); Console.SetCursorPosition(0, 0); Console.Write("Nombre del relé 1: "); Console.SetCursorPosition(0, 1); //Console.Write("AAAAAAAAAAAAAAAA"); for (int i = 0; i < roINDICE_ARRAY.Length; i++) { Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]); } Console.SetCursorPosition(2, 3); Console.Write(TEXTO[0]); // ATRÁS. Console.SetCursorPosition(12, 3); Console.Write(TEXTO[1]); // GUARDAR. while (true) { Console.SetCursorPosition(coordenadaX, 1); key = Console.ReadKey(true).Key; switch (key) { case ConsoleKey.RightArrow: if (coordenadaX < 15) coordenadaX++; break; case ConsoleKey.LeftArrow: if (coordenadaX > 0) coordenadaX--; break; case ConsoleKey.UpArrow: roINDICE_ARRAY[coordenadaX]++; if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length) { roINDICE_ARRAY[coordenadaX] = 0; } Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]); break; case ConsoleKey.DownArrow: roINDICE_ARRAY[coordenadaX]--; if (roINDICE_ARRAY[coordenadaX] < 0) { roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1; } Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]); break; case ConsoleKey.Enter: Console.SetCursorPosition(1, 3); Console.Write(">"); while (true) { key = Console.ReadKey(true).Key; switch (key) { case ConsoleKey.RightArrow: case ConsoleKey.LeftArrow: index = 1 - index; break; case ConsoleKey.UpArrow: case ConsoleKey.DownArrow: Console.SetCursorPosition(coordenadaX, 1); break; case ConsoleKey.Enter: break; } for (int a = 0; a < 2; a++) { Console.SetCursorPosition(1 + (10 * a), 3); if (a == index) Console.Write(">"); else Console.Write(" "); } if (index == 0) // se pulsó Atrás { Atras(); //break; // vuelve a la edición de letras } else if (index == 1) // se pulsó Guardar { Guardar(); } } } } } #endregion private static void Atras() { Console.Clear(); Console.SetCursorPosition(0, 1); Console.Write("HAS PULSADO ATRÁS "); Console.ReadKey(); // Pulse cualquier tecla para salir. } private static void Guardar() { Console.Clear(); Console.SetCursorPosition(0, 1); Console.Write("HAS GUARDADO "); for (int a = 0; a < roINDICE_ARRAY.Length; a++) guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString(); Console.SetCursorPosition(0, 2); Console.Write(guardarNombre); } } }
Un cordial saludos.