none
Guardar la posición del radio button. RRS feed

  • Pregunta

  • Hola:

    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 hecho hasta ahora es este:

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

    Al menos guardar dicho * en una variable, para que se quede almacenado.

    Saludos.


    http://electronica-pic.blogspot.com

    sábado, 13 de junio de 2020 23:28

Respuestas

  • Hola 

    Aquí está el código arreglado

    using System;
    
    namespace radioButton_consola_02_cs_Codigo_Chapuza
    {
        class Program
        {
            #region Variables.
            private static readonly string[] TEXTO = new string[] 
            {
                "( ) Opción A        ",
                "( ) Opción B        ",
                "( ) Opción C        ",
                "    SALIR"
            };
    
            private static int itemSeñalado;
    
            private static int itemSeleccionado;
            #endregion
    
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "RadioButton";
    
                // 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.
            private static 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;
    
                itemSeñalado = 0;  // así cada vez que volves está señalado en la 1ra
    
                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.
    
                    // 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:
                            if (itemSeñalado < 3)
                                itemSeleccionado = itemSeñalado;
                            salir = (itemSeñalado == 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
        }
    }
    

    • Marcado como respuesta Metaconta lunes, 15 de junio de 2020 0:11
    lunes, 15 de junio de 2020 0:02

Todas las respuestas

  • buen día, intenta hacerlo mediante los user settings, esos pueden guardar de todo, desgraciadamente no tengo mi pc a la mano.

    E aquí un vídeo que os podría ayudar:

    https://www.youtube.com/watch?v=7SMo2zUrERE

    espero haber sido de ayuda, saludos.

    domingo, 14 de junio de 2020 1:45
  • Me interesa guardarlo en una variable.

    http://electronica-pic.blogspot.com

    domingo, 14 de junio de 2020 7:22
  • Hola Metaconta

    Pone las variables itemSeñalado y itemSeleccionado como miembros de clase que comiencen en 0 y así te guarda tanto el señalador > como el radioButton marcado.

    domingo, 14 de junio de 2020 11:55
  • ¿Variables como miembro de una clase?

    No se a que te refieres.

    Pensé en algo de esto.

    public static itemSeñalado = 0;

    public static itemSeleccionafo = 0;


    http://electronica-pic.blogspot.com

    domingo, 14 de junio de 2020 19:51
  • Si, porque así no pierden sus valores cada vez que se llama a un método que los usa.

    private static int itemSeñalado;

    private static int itemSeleccionado;

    y dentro del método MenuPrincipal, quitas las declaraciones de esas 2 variables.

    ...

    Yo usaría la clases MenuTree y Menu, pero si lo queres hacer de esta forma (cómo era la palabra? "chapuza"?) entonces es así.

    domingo, 14 de junio de 2020 21:18
  • Buenas:

    Pulso Enter, me sale las tres opciones. Luego pulso, Enter en la opción C y que sea así abajo.


    Pulso Enter en Salir como indica abajo.

    Vuelve a Inico, que es el MENÚ PRINCIPAL.

    Pulso Enter y se me queda el * y el > en Salir. Totalmente es erróneo.

    Debería ser así. Si pulso Enter, y la se quedó grabado el * en la opción C, a parte de esto, el > que aparezca desde el principio. Tal como se ve en la captura de abajo.

    Código C#:

    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"
            };
    
            private static int itemSeñalado;
    
            private static int itemSeleccionado;
            #endregion
    
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "RadioButton";
    
                // 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.
    
                        // 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
            }
        }
    }


    http://electronica-pic.blogspot.com



    • Editado Metaconta domingo, 14 de junio de 2020 23:15
    domingo, 14 de junio de 2020 23:13
  • Dios mio!!!

    Me parece que lo que pasó es que pulsaste Enter estando el Señalador en SALIR, y te marcó allí el itemSeleccionado, el muchacho que hizo ese código se olvidó de prevenirlo. (No digo la palabra que diríamos acá en Argentina porque en España significa otra cosa ... ja ja ja!)

    Dame unos instantes que te lo arreglo como vos lo queres.

    domingo, 14 de junio de 2020 23:45
  • Hola 

    Aquí está el código arreglado

    using System;
    
    namespace radioButton_consola_02_cs_Codigo_Chapuza
    {
        class Program
        {
            #region Variables.
            private static readonly string[] TEXTO = new string[] 
            {
                "( ) Opción A        ",
                "( ) Opción B        ",
                "( ) Opción C        ",
                "    SALIR"
            };
    
            private static int itemSeñalado;
    
            private static int itemSeleccionado;
            #endregion
    
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "RadioButton";
    
                // 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.
            private static 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;
    
                itemSeñalado = 0;  // así cada vez que volves está señalado en la 1ra
    
                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.
    
                    // 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:
                            if (itemSeñalado < 3)
                                itemSeleccionado = itemSeñalado;
                            salir = (itemSeñalado == 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
        }
    }
    

    • Marcado como respuesta Metaconta lunes, 15 de junio de 2020 0:11
    lunes, 15 de junio de 2020 0:02
  • Funciona de maravilla.

    Por fin. Muchas gracias mi muy distinguido amigo.


    http://electronica-pic.blogspot.com

    lunes, 15 de junio de 2020 0:11
  • Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

    lunes, 15 de junio de 2020 20:47
    Moderador