none
RadioButton en consola C# RRS feed

  • Pregunta

  • Buenas:

    Hice el redibujado de tres opciones, en el cual debe comportarse como radioBox, por ejemplo.

    > (*) Opción A.  
      ( ) Opción B.
      ( ) Opción C.
      Salir.
    1. Solo hay que usar las flechas del teclado y la tecla Enter para este programa.
    2. El símbolo > se visualiza para saber en que posición de las opciones estás.
    3. El asterisco * siempre hay uno señalado en algunas de las opciones.
    4. Cuando señales con > una opción, al pulsar Enter se añade el (*), y los demás se quitan. No confundir con checkBox.
    5. Si vuelves a pulsar, se pone a ( ).

    Dejo el código de lo que he hecho hasta el momento. No me sale lo de seleccionar el *.

    using System;
    
    namespace radioButton_consola_01_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()
                {
    
                    // 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
            }
        }
    }
    
    ¿Alguna ayuda?

    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 11 de junio de 2020 14:20

Respuestas

  • Deleted
    • Marcado como respuesta Metaconta viernes, 12 de junio de 2020 12:46
    viernes, 12 de junio de 2020 4:08
    • Marcado como respuesta Metaconta sábado, 13 de junio de 2020 0:27
    viernes, 12 de junio de 2020 12:52
  • Hola

    Cambia 

             int itemSeleccionado = -1;

    por 

             int itemSeleccionado = 0;

    así aparecerá el 1er radioButton marcado

    • Marcado como respuesta Metaconta sábado, 13 de junio de 2020 6:52
    sábado, 13 de junio de 2020 3:16
  • Hola Metaconta

    Lo que hace es imprimir las opciones en TEXTO con el contador k, y en cada una comprueba si k es igual a itemSeñalado, si lo es imprime el >, y también comprueba si k es igual a itemSeleccionado, si lo es imprime el *.

    Esto es algo parecido a lo que se realiza en una parte de la clase Menu, yo diría que es la parte del código (éste) que mejor está, porque usa índices y no repite código, ... bueno, un poco si porque imprime todos los strings con cada movimiento del usuario. Pero está bastante bien esa parte dentro de todo.

    No se si es bueno guardar esa información del (*) guardado en una variable por si acaso.

    Esto te lo respondí en la otra pregunta, si las variables itemSeñalado y itemSeleccionado fueran miembros de clase (que incien en 0) se guardaría el item señalado y el item marcado.

    • Marcado como respuesta Metaconta domingo, 14 de junio de 2020 22:58
    domingo, 14 de junio de 2020 22:39

Todas las respuestas

  • Hola  Metaconta,

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que para que la comunidad de foros te pueda asesorar mejor, es necesario que escribas una pregunta concreta sobre el caso que tienes y que deseas resolver.

      

    Gracias por usar los foros de MSDN.  

      

    Andres Aguilar 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 11 de junio de 2020 17:49
    Moderador
  • Deleted
    • Marcado como respuesta Metaconta viernes, 12 de junio de 2020 12:46
    viernes, 12 de junio de 2020 4:08
  • Hola Metaconta

    Ya lo teníamos hecho lo del RadioButton ... y también lo del CheckBox, ... no lo puedo encontrar ahora, pero fijate en tus posts que tiene que estar.

    Saludos

    viernes, 12 de junio de 2020 12:14
  • using System;
    
    namespace radioButton_consola_01_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()
                {
    
                    // Contador de teclas y navegador.
                    int opcion = 0;
                    bool salir = false;
    
                    // 
                    int itemSeleccionado = -1;
                    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
            }
        }
    }

    Gracias.

    Lo voy a probar.

    Tigre:

    Lo he mirado y me cuesta comprenderlo. En este código voy por partes.

    Gracias.



    http://electronica-pic.blogspot.com

    viernes, 12 de junio de 2020 12:47
    • Marcado como respuesta Metaconta sábado, 13 de junio de 2020 0:27
    viernes, 12 de junio de 2020 12:52
  • Hola Metaconta

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      


    viernes, 12 de junio de 2020 13:35
    Moderador
  • Encontré un mini error al programa.

    El programa quiero que de inicio, tenga la opción A con el *. No debe estar en blanco todas las opciones, solo  debe estar en una opción marcada.

    Gracias.

    PD: Me da que el error fue mio, que no me expresé bien.


    http://electronica-pic.blogspot.com

    sábado, 13 de junio de 2020 0:26
  • Hola

    Cambia 

             int itemSeleccionado = -1;

    por 

             int itemSeleccionado = 0;

    así aparecerá el 1er radioButton marcado

    • Marcado como respuesta Metaconta sábado, 13 de junio de 2020 6:52
    sábado, 13 de junio de 2020 3:16
  • Buenas Trigre Pablito:

    Por lo que he comprobado es así.

                    // 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

    Ya funciona lo de arriba, por fin. Me he dado cuenta en una cosa. Cuando elijo por ejemplo la "(*) Opción C", luego le doy a SALIR con Enter, sale al inicio, al pulsar Enter otra vez, ya no se muestra donde estaba el * en la Opción C, si no empieza desde la Opción A.

    No se si es bueno guardar esa información del (*) guardado en una variable por si acaso.

    ¿Se puede corregir?

    Ahora en lo de abajo, para ponerle una descripción con el //. ¿Qué es lo que hace realmente esto?

                        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 ? "*" : " ");
                        }

    Por lo que entiendo, lee el array que tiene dentro del TEXTO. Según lo que pasa por la variable k, va imprimiendo más esto símbolo > según va detectando si el iten está señalado o no.

    Saludos.


    http://electronica-pic.blogspot.com




    • Editado Metaconta sábado, 13 de junio de 2020 7:15
    sábado, 13 de junio de 2020 6:58
  • Hola Metaconta

    Lo que hace es imprimir las opciones en TEXTO con el contador k, y en cada una comprueba si k es igual a itemSeñalado, si lo es imprime el >, y también comprueba si k es igual a itemSeleccionado, si lo es imprime el *.

    Esto es algo parecido a lo que se realiza en una parte de la clase Menu, yo diría que es la parte del código (éste) que mejor está, porque usa índices y no repite código, ... bueno, un poco si porque imprime todos los strings con cada movimiento del usuario. Pero está bastante bien esa parte dentro de todo.

    No se si es bueno guardar esa información del (*) guardado en una variable por si acaso.

    Esto te lo respondí en la otra pregunta, si las variables itemSeñalado y itemSeleccionado fueran miembros de clase (que incien en 0) se guardaría el item señalado y el item marcado.

    • Marcado como respuesta Metaconta domingo, 14 de junio de 2020 22:58
    domingo, 14 de junio de 2020 22:39