Buenas:
(https://www.subeimagenes.com/img/aaa-2111381.gif)
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.
using System;
namespace LCD_nombre_archivo_consola_03
{
class Program
{
static string guardarNombre = "";
static int coordenadaX = 0;
static ConsoleKey key;
static readonly char[] roALFANUMERICO
= new char[] { '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','.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '};
static readonly int[] roINDICE_ARRAY
= new int[] { 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 };
static readonly string[] TEXTO
= new string[] { "ATRÁS",
"GUARDAR" }; 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.