CheckBox modo consola

Iniciado por Meta, Julio 08, 2020, 07:34:43 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 08, 2020, 07:34:43 PM Ultima modificación: Julio 08, 2020, 09:18:39 PM por Gabriela
Buenas:

En la consola de C#, quiero crear un menú que solo aparezca checkBox como indica abajo.


En este programa solo se usa las teclas de las flechas y la tecla Enter.

Como se puede ver, con la > indica en que opciones estás. Si pulsas arriba todo el rato, por ejemlo si estás en la [ ] Opción A, vuelves a pulsar arriba, directamente el > estrá por debajo, ocurre lo mismo pero al revés.

Como ejemplo, elejo la [ ] Opción B, pulse Enter y se pone una X en medio, como que está seleccionado.

Quedaría así:
> [X] Opción B.

Como indica en la captura de arriba.

En realidad quiero poner siete opciones en total, desde la A hasta la G.

En la primera parte de la pantalla quedaría algo así.

Código: php
 [ ] Opción A
  [X] Opción B
[ ] Opción C
> [X] Opción D

Si sigo pulsando la tecla hacia abajo, cambia otra página de menús, en realidad es el mismo. Quedaría como indica abajo.
Código: php
>  [X] Opción E
[ ] Opción F
[ ] Opción G
  Salir


Si pulsas salir, vuelves al menú principal. Por supuesto, todo dato guardado que en su variable, cada opción en su variable, y de paso, cada variable que en realidad es boleano, queda guardado en un Archivo.txt. Guarda datos de una opción desde que pulse Enter, sea  marcando la X o no. Todo queda guardado. A parte de todo esto, al ejecutar la aplicación, lee todos los datos que estaba almacenado en Archivo.txt.

Lo he intentado pero no doy para más, dejo el código de ejemplo aquí abajo.
Código: csharp
using System;

namespace CheckBox_consola_01_cs
{
    class Program
    {
        #region Variables.
        private static readonly string[] TEXTO = new string[] {
            "[ ] Opción A        ",
            "[X] Opción B        ",
            "[ ] Opción C        ",
            "SALIR"
        };
        #endregion

        static void Main(string[] args)
        {
            // Título de la ventana:
            Console.Title = "Título";

            // 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()
            {

                // Contador de teclas y navegador.
                int opcion = 0;
                bool salir = false;
                // 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();

                    switch (opcion)
                    {
                        case 0:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 0);
                            Console.Write(">");
                            break;
                        case 1:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 1);
                            Console.Write(">");
                            break;
                        case 2:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 2);
                            Console.Write(">");
                            break;
                        case 3:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            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 (opcion)
                        {
                            case 0:
                                //OpcionA();
                                break;
                            case 1:
                                //OpcionB();
                                break;
                            case 2:
                                //OpcionC();
                                break;
                            case 3:
                                salir = true;
                                break;
                            default:
                                break;
                        }
                    }

                    if (tecla == ConsoleKey.DownArrow)
                    {
                        opcion++;
                    }

                    if (tecla == ConsoleKey.UpArrow)
                    {
                        opcion--;
                    }

                    // Si está en la última opción, salta a la primera.
                    if (opcion > 3)
                    {
                        opcion = 0;
                    }

                    // Si está en la primera posición, salta a la última.
                    if (opcion < 0)
                    {
                        opcion = 3;
                    }
                    // Uso la tecla escape como salida.
                } while (salir == false);
            }
            #endregion
        }
    }
}

El código está incomleto y mal diseñado, seguro que se hace en menos código.

Gracias.