Escoger una opción y marcarla

Meta Seguir

Alfa
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
6 Ago 2024
Mensajes
15
Buenos días programadores:Quiero hacer un programa en consola con C# usando como si estuviera con radioButton, hay tres opciones y se selecciona con el >, al pulsar Enter, se marca por ejemplo así, (x) Opción B.

Solo se puede controlar la consola con las flechas del teclado, y Enter.

En la primera ventana se muestra así:
Opciones01.jpg


Como muestra en la imagen de arriba, está seleccionado con > en este caso la ( ) Opción A, con las flechas de arriba y abajo escoges la opción que quieras y solo se queda una opción marcada con una x. No puede haber varios seleccionado en un radioButton, solo uno. Una vez elegida una opción, se marca o desmarca pulsando la tecla Enter.

Si sigues indicando con la flecha del teclado, llega a la otra opción SALIR como indica abajo y pulsas Enter, simplemente sales del programa.
Opciones02.jpg


A parte de todo esto, la información o las opciones queda guardada en un archivo de texto, si no existe, lo crea al lado del ejecutable, si existe, solo lee la información al volver a ejecutar el programa.

¿Cómo se hace?

Por ahora solo he hecho esto, un código muy malo y sin acabar.
C#:
using System;

namespace Pruebas_Opcioines_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.

                bool opcionA = true;
                bool opcionB = false;
                bool opcionC = false;

                // 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      ");
                            if ((opcionA == true) && (opcionB == false) && (opcionC == false))
                            {
                                Console.SetCursorPosition(3, 1);
                                Console.Write("x");
                                Console.SetCursorPosition(3, 2);
                                Console.Write(" ");
                                Console.SetCursorPosition(3, 3);
                                Console.Write(" ");
                            }
                            else
                            {
                                Console.SetCursorPosition(3, 1);
                                Console.Write(" ");
                            }
                            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      ");
                            if (opcionA == false && opcionB == true && opcionC == false)
                            {
                                Console.SetCursorPosition(3, 1);
                                Console.Write(" ");
                                Console.SetCursorPosition(3, 2);
                                Console.Write("x");
                                Console.SetCursorPosition(3, 3);
                                Console.Write(" ");
                            }
                            else
                            {
                                Console.SetCursorPosition(3, 2);
                                Console.Write(" ");
                            }
                            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      ");
                            if (opcionA == false && opcionB == false && opcionC == true)
                            {
                                Console.SetCursorPosition(3, 1);
                                Console.Write(" ");
                                Console.SetCursorPosition(3, 2);
                                Console.Write(" ");
                                Console.SetCursorPosition(3, 3);
                                Console.Write("x");
                            }
                            else
                            {
                                Console.SetCursorPosition(3, 3);
                                Console.Write(" ");
                            }
                            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:
                                opcionA = true;
                                opcionB = false;
                                opcionC = false;
                                break;

                            case 1:
                                opcionA = false;
                                opcionB = true;
                                opcionC = false;
                                break;

                            case 2:
                                opcionA = false;
                                opcionB = false;
                                opcionC = true;
                                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);
            }
        }
    }
}

Saludos.
 

Puko

Épsilon
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
20 Dic 2022
Mensajes
862
¿Por fuerza lo ocupas hacer en la consola #C ?
Más fácil en python

2024-08-06_205107.jpg
 

Meta

Alfa
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
6 Ago 2024
Mensajes
15
Buenas.

Se usa el lenguaje que la empresa quiere que uses. ☺️

Ya me salió.

En tu caso, hay que usarlo como una ventana, no que se escriba una letra, se marca la letra y luego pulsas Enter.

Por ejemplo, este vídeo, y todo en una ventana, nada de que se vea todo la hilera de ventanas de opciones unas tras otras como en tu caso de Python, o otro lenguaje, depende de como lo programes.

Por ejemplo, como puedes ver en este vídeo.
 
Arriba