![Opciones03.jpg](https://i.postimg.cc/Y2gBC820/Opciones03.jpg)
Usando C# en modo consola, se puede señalar con las flechas del teclado seleccionar alguna opción con esto >. Solo debe estar marcado con una x.
La idea es, al ejecutar el programa, si no encuentra el archivo.txt, lo cree y escribe la opción marcada con la x.
Al volver a ejecutar el programa, me indica la opción marcada que leyó en el archivo.txt.
Código que he hecho hasta ahora pero no lee, si lo crea es este:
C#:
using System;
using System.IO;
namespace Pruebas_Opciones_Consola_02
{
internal class Program
{
static void Main(string[] args)
{
#region Configuración ventana.
// Título de la ventana.
Console.Title = "Opciones";
// Tamaño de la ventana, x, y o, ancho y alto.
const byte ancho = 20, alto = 5;
Console.SetWindowSize(ancho, alto);
// Quitar scroll laterales. Derecho y abajo.
Console.SetBufferSize(ancho, alto);
// Color de fondo.
Console.BackgroundColor = ConsoleColor.Yellow;
// Color de las letras.
Console.ForegroundColor = ConsoleColor.Black;
// Limpiar pantalla y dejarlo todo en color de fondo.
Console.Clear();
// Visible el cursor. // No! Así lo haces invisible.
Console.CursorVisible = false;
#endregion
string[] opciones =
{
" ** TÍTULO ** ", // Posición 0.
" ( ) Opción A ", // 1
" ( ) Opción B ", // 2
" ( ) Opción C ", // 3
" SALIR ", // 4
">", // 5
"x", // 6
" ", // 7
" " // 8
};
string opA = "x";
string opB = " ";
string opC = " ";
Menu();
#region Opociones, selecciones y guardar archivo .txt
void OpcionesA()
{
Console.SetCursorPosition(0, 0);
Console.Write(opciones[0]); // ** TÍTULO **
Console.SetCursorPosition(0, 1);
Console.Write(opciones[1]); // ( ) Opción A
Console.SetCursorPosition(0, 2);
Console.Write(opciones[2]); // ( ) Opción B
Console.SetCursorPosition(0, 3);
Console.Write(opciones[3]); // ( ) Opción C
}
void OpcionesB()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[4]); // SALIR
Console.SetCursorPosition(0, 2);
Console.Write(opciones[8]); //
Console.SetCursorPosition(0, 3);
Console.Write(opciones[8]); //
}
void SelectorA()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[5]); // >
Console.SetCursorPosition(0, 2);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 3);
Console.Write(opciones[7]);
}
void SelectorB()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 2);
Console.Write(opciones[5]); // >
Console.SetCursorPosition(0, 3);
Console.Write(opciones[7]);
}
void SelectorC()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 2);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 3);
Console.Write(opciones[5]); // >
}
#endregion
void Menu()
{
sbyte indiceSeleccionado = 0; // Índice seleccionado de cada opción del menú.
bool salir = false; // Para salir del menú principal al INICIO.
sbyte SELECCION_OPCIONES_TOTALES = 3; // Total de opciones para seleccionar y fija.
// Capturar tecla para luego validar.
ConsoleKey tecla;
// Crear archivo y guarda el * seleccioinado en él.
if (File.Exists("Archivo.txt"))
{
string data = File.ReadAllText("Archivo.txt");
opA = Convert.ToString(data);
opB = Convert.ToString(data);
opC = Convert.ToString(data);
}
do
{
//******************************************************************
// Dibujo el menú principal.
switch (indiceSeleccionado)
{
case 0:
OpcionesA();
SelectorA();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;
case 1:
OpcionesA();
SelectorB();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;
case 2:
OpcionesA();
SelectorC();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;
case 3:
OpcionesB();
Console.SetCursorPosition(0, 1);
Console.Write(opciones[5]); // >
break;
default:
Console.Write("Fuera de rango. ");
break;
}
// Fin de pintar el menú principal.
//******************************************************************
// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;
// Validar el tipo de tecla.
if (tecla == ConsoleKey.Enter)
{
switch (indiceSeleccionado)
{
case 0:
opA = "x"; opB = " "; opC = " ";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opA.ToString());
}
break;
case 1:
opA = " "; opB = "x"; opC = " ";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opB.ToString());
}
break;
case 2:
opA = " "; opB = " "; opC = "x";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opC.ToString());
}
break;
case 3:
indiceSeleccionado = 0; // Restaurar índice antes de salir.
salir = true; // Salir.
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}
// ¿Has pulsado tecla flecha Abajo?
if (tecla == ConsoleKey.DownArrow)
{
indiceSeleccionado++;
}
// Entonces si pulsas tecla flecha Arriba.
if (tecla == ConsoleKey.UpArrow)
{
indiceSeleccionado--;
}
// Si está en la última opción, salta a la primera.
if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
{
indiceSeleccionado = 0;
}
// Si está en la primera posición, salta a la última.
if (indiceSeleccionado < 0)
{
indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
}
// Uso la tecla escape como salida.
} while (!salir);
}
}
}
}