Aquí un programa hecho en consola, solo se usa las flechas del teclado y Enter.
Este programa se basa en radioButton, que en este caso funciona si selecciona una opción y pulsas Enter, se pone un asterisco. Hasta ahí bien.
Al pulsar Salir, luego Entrar, no se queda guardado el * en el último radioButton seleccionado.
¿Cómo se hace?
El código que tengo por ahora lo dejo aquí.
Código:
using System;
namespace radioButton_consola_02_cs
{
class Program
{
#region Variables.
private static readonly string[] TEXTO = new string[]
{
"( ) Opción A ",
"( ) Opción B ",
"( ) Opción C ",
" SALIR"
};
#endregion
static void Main(string[] args)
{
// Tamaño de la ventana.
Console.SetWindowSize(20, 5);
// Fondo verde.
Console.BackgroundColor = ConsoleColor.Blue;
// Letras negras.
Console.ForegroundColor = ConsoleColor.White;
// Oculto el cursor.
Console.CursorVisible = false;
// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;
do
{
// Limpiar pantalla.
Console.Clear();
// Posición del cursor del título del MENÚ PRINCIPAL.
Console.SetCursorPosition(0, 0);
// Título.
Console.Write(" MENÚ PRINCIPAL ");
// Pocisión de la hora.
Console.SetCursorPosition(4, 2);
// Formato numérico dd/MM/yyyy.
Console.Write(DateTime.Now.ToString("ddd dd MMM"));
// Almacena en la variable una tecla pulsada.
teclaInicial = Console.ReadKey(true).Key;
// ¿Haz pulsado la tecla Enter?
if (teclaInicial == ConsoleKey.Enter)
{
// Sí. Se ejecuta esta función.
MenuPrincipal();
}
} while (teclaInicial != ConsoleKey.Escape);
#region Menú Principal.
void MenuPrincipal()
{
bool salir = false;
// En itemSelecionado:
// -1 = Sin seleccionar con * ninguna opción.
// 0 = Seleccionar con * la Opción A.
// 1 = Seleccionar con * la Opción B.
// 2 = Seleccionar con * la opción C.
int itemSeleccionado = 0;
int itemSeñalado = 0;
// Capturar tecla para luego validar.
ConsoleKey tecla;
do
{
//******************************************************************
// Dibujo el menú principal.
// Rellenar fondo verde.
//Console.BackgroundColor = ConsoleColor.Green;
// Letras negras.
//Console.ForegroundColor = ConsoleColor.Black;
// Limpiar pantalla.
Console.Clear();
for (int k = 0; k < TEXTO.Length; k++)
{
Console.SetCursorPosition(0, k);
Console.Write(itemSeñalado == k ? "> " : " ");
Console.Write(TEXTO[k]);
Console.SetCursorPosition(3, k);
Console.Write(itemSeleccionado == k ? "*" : " ");
}
// Fin de pintar el menú principal.
//******************************************************************
// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;
switch (tecla)
{
case ConsoleKey.Enter:
itemSeleccionado = itemSeñalado;
salir = (itemSeleccionado == TEXTO.Length - 1);
break;
case ConsoleKey.DownArrow:
if (++itemSeñalado >= TEXTO.Length)
{
itemSeñalado = 0;
}
break;
case ConsoleKey.UpArrow:
if (--itemSeñalado < 0)
{
itemSeñalado = TEXTO.Length - 1;
}
break;
}
// Uso la tecla escape como salida.
} while (!salir);
}
#endregion
}
}
}
Saludos.