• ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Controlar radioButton en consola

Meta

Nuevo
Registrado
1 Mar 2023
Mensajes
3
Puntos
1
Edad
45
Hola:

Uso el lenguaje C# en modo consola. Solo se usan las flechas del teclado y Enter. Si pulsas flechas del teclado arriba o abajo escoges opciones A, B C señaladas con el >, si pulsas Enter, selecciona esa opción con una x. Solo se permite marcar una opción.
37273e6c-e6a6-42fb-b24b-c1aaaff5208b


En la otra pantalla de abajo, si pulsas Enter en SALIR, el programa se termina.
cde902e6-1980-4a86-9b6e-0f94c0193209


Solo he hecho seleccionar las opciones con el >, pero no me funciona bien marcar las opciones con la x. También quiero guardar en un archivo de texto .txt la opción marcada, ya que al volver a ejecutar el programa, lea cual fue marcado.

Por ahora solo he hecho esto y anda más.

C#:
using System;

namespace Pruebas_Opciones_Consola_01
{
    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.Black;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Gray;

            // Limpiar pantalla y dejarlo todo en color de fondo.
            Console.Clear();

            // Visible el cursor. // No! Así lo haces invisible.
            Console.CursorVisible = false;
            #endregion

            Menu();

            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;

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    switch (indiceSeleccionado)
                    {
                        case 0:
                            Console.SetCursorPosition(0, 0);
                            Console.Write("    ** TÍTULO **    ");
                            Console.SetCursorPosition(0, 1);
                            Console.Write("> ( ) Opción A      ");
                            Console.SetCursorPosition(0, 2);
                            Console.Write("  ( ) Opción B      ");
                            Console.SetCursorPosition(0, 3);
                            Console.Write("  ( ) Opción C      ");
                            break;

                        case 1:
                            Console.SetCursorPosition(0, 0);
                            Console.Write("    ** TÍTULO **    ");
                            Console.SetCursorPosition(0, 1);
                            Console.Write("  ( ) Opción A      ");
                            Console.SetCursorPosition(0, 2);
                            Console.Write("> ( ) Opción B      ");
                            Console.SetCursorPosition(0, 3);
                            Console.Write("  ( ) Opción C      ");
                            break;

                        case 2:
                            Console.SetCursorPosition(0, 0);
                            Console.Write("    ** TÍTULO **    ");
                            Console.SetCursorPosition(0, 1);
                            Console.Write("  ( ) Opción A      ");
                            Console.SetCursorPosition(0, 2);
                            Console.Write("  ( ) Opción B      ");
                            Console.SetCursorPosition(0, 3);
                            Console.Write("> ( ) Opción C      ");
                            break;

                        case 3:
                            Console.SetCursorPosition(0, 0);
                            Console.Write("    ** TÍTULO **    ");
                            Console.SetCursorPosition(0, 1);
                            Console.Write("> SALIR             ");
                            Console.SetCursorPosition(0, 2);
                            Console.Write("                    ");
                            Console.SetCursorPosition(0, 3);
                            Console.Write("                    ");
                            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:
                                break;

                            case 1:
                                break;

                            case 2:
                                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);
            }
        }
    }
}

Se que es una forma de programar chapuza, al menos funciona algo. Solo falta programarla mejor y terminarlo.

Muchas gracias compañeros y que tengan buen día. ;)
 
Arriba