none
Submenús en el menú principal RRS feed

  • Pregunta

  • Buenas gente del foro:

    Espero que estén tod@s bien.

    Estoy haciendo un modo menú y submenú en modo consola C# 2019.  He creado un menú sencillo.

    Por ahora no he creado ningún submenú. Quiero crear un submenú en cada menú como puede ver arriba.

    Si selecciono el menú DOS, al pulsar Enter entra en dicho submenú y tiene que mostrar este mensaje.

    HAZ ENTRADO EN EL SUBMENÚ DOS.Luego hay que pulsar en la opción SALIR con Enter y vuelve al menú principal. Así con todos.

    En el submenú idiomas. Este es ya más complicado.

    Quiero que al pulsar e, submeú IDIOMA aparezca un submenú que dice esto:

    LANGUAJE:

    ESPAÑOL
    INGLÉS
    ALEMÁN
    SALIR

    Las traduccioines me encargaré gracias al traductor.

    Si elijes un idioma, se cambia todo a su idioma, menús y submenús.

    ¿Cuál es la mejor manera de hacerlo?

    Dejo el código base aquí.

    using System;
    
    namespace Menu_consola_14_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Menú de opciones";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 25;
    
                // Y altura.
                Console.WindowHeight = 11;
    
                // Cursor invisible.
                Console.CursorVisible = false;
    
                // Contador de teclas y navegador.
                int contador = 0;
    
                // Capturar la tecla para validar luego.
                ConsoleKey tecla;
    
                // Título dentro del menú.
                Console.SetCursorPosition(4, 1);
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("MENÚ PRINCIPAL");
    
    
    
    
                do
                {
                    //******************************************************************
                    //Pinto el menú
                    //Console.Clear(); // Limpiar pantalla.
    
                    if (contador == 0)
                    {
                        Console.SetCursorPosition(2, 3);
                        color1();
                        Console.WriteLine(" UNO         ");
                    }
                    else
                    {
                        Console.SetCursorPosition(2, 3);
                        color2();
                        Console.WriteLine(" UNO         ");
                    }
    
                    if (contador == 1)
                    {
                        Console.SetCursorPosition(2, 4);
                        color1();
                        Console.WriteLine(" DOS         ");
                    }
                    else
                    {
                        Console.SetCursorPosition(2, 4);
                        color2();
                        Console.WriteLine(" DOS         ");
                    }
    
                    if (contador == 2)
                    {
                        Console.SetCursorPosition(2, 5);
                        color1();
                        Console.WriteLine(" TRES        ");
                    }
                    else
                    {
                        Console.SetCursorPosition(2, 5);
                        color2();
                        Console.WriteLine(" TRES        ");
                    }
    
                    if (contador == 3)
                    {
                        Console.SetCursorPosition(2, 6);
                        color1();
                        Console.WriteLine(" CUATRO      ");
                    }
                    else
                    {
                        Console.SetCursorPosition(2, 6);
                        color2();
                        Console.WriteLine(" CUATRO      ");
                    }
    
                    if (contador == 4)
                    {
                        Console.SetCursorPosition(2, 7);
                        color1();
                        Console.WriteLine(" IDIOMA      ");
                    }
    
                    else
                    {
                        Console.SetCursorPosition(2, 7);
                        color2();
                        Console.WriteLine(" IDIOMA      ");
                    }
    
                    if (contador == 5)
                    {
                        Console.SetCursorPosition(2, 8);
                        color1();
                        Console.WriteLine(" ESC = SALIR ");
                    }
    
                    else
                    {
                        Console.SetCursorPosition(2, 8);
                        color2();
                        Console.WriteLine(" ESC = SALIR ");
                    }
    
                    // Fin de pintar el menú.
                    //******************************************************************
    
                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;
    
                    //validar el tipo de tecla
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        contador += 1;
                    }
    
                    if (tecla == ConsoleKey.UpArrow)
                    {
                        contador -= 1;
                    }
    
                    // Si está en la última opción, salta a la primera.
                    if (contador > 5)
                    {
                        contador = 0; // Estaba en el valor 5. Si se deja en 5, ya no puede
                                      // las opciones circular.
                    }
    
                    // Si está en la primera posición, salta a la última.
                    if (contador < 0)
                    {
                        contador = 5; // 0.
                    }
    
                    // Uso la tecla escape como salida.
                } while (tecla != ConsoleKey.Escape);
    
                void color2()
                {
                    Console.BackgroundColor = ConsoleColor.Black; // Fondo pantalla.
                    Console.ForegroundColor = ConsoleColor.Gray; // Letra.
                }
    
                void color1()
                {
                    Console.BackgroundColor = ConsoleColor.Blue;
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }
        }
    }

    Salu2.


    http://electronica-pic.blogspot.com

    sábado, 22 de febrero de 2020 8:10

Respuestas

  • Hola Metaconta

    Interesante este programita! Me hace un poco recordar cuando programaba menús en el antiguo Lenguaje C para el antiguo sistema MS-DOS, cuando era joven, aunque no es muy diferente de los menús que uso en mis video juegos, ahora que soy un anciano de 40, la lógica es siempre la misma. 

    Lo primero que hice fue optimizar un poco lo que vos ya habías hecho (o sea escribirlo en muchas menos lineas) y luego agregué lo del Submenú DOS y lo del idioma, pero sólo admite Español e Inglés, porque no se más idiomas. Pero seguramente vos lo podrás completar como necesites o como te parezca.

    using System;
    
    namespace Menu_consola_14_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                
                Console.Title = "Menú de opciones";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 25;
    
                // Y altura.
                Console.WindowHeight = 11;
    
                // Cursor invisible.
                Console.CursorVisible = false;
    
                // Capturar la tecla para validar luego.
                ConsoleKey tecla;
    
                MostrarTitulo();
    
                int a, indiceMenu = 0;
                int indiceIdioma = 0;
                string[][] menus = new string[][] {
                    new string[] {
                        " UNO         ", " DOS         ", " TRES        ", " CUATRO      ", " IDIOMA      ", " ESC = SALIR "
                    },
                    new string[] { 
                        " ONE         ", " TWO         ", " THREE       ", " FOUR        ", " LANGUAGE    ", " ESC = EXIT  "
                    } 
                };
    
                do
                {
                    //******************************************************************
                    //Pinto el menú
                    //Console.Clear(); // Limpiar pantalla.
    
                    for (a = 0; a < menus[0].Length; a++)
                    {
                        Console.SetCursorPosition(2, 3 + a);
                        if (a == indiceMenu)
                            color1();
                        else
                            color2();
                        Console.Write(menus[indiceIdioma][a]);
                    }
    
                    // Fin de pintar el menú.
                    //******************************************************************
    
                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;
    
                    //validar el tipo de tecla
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        indiceMenu++;
                    }
                    else if (tecla == ConsoleKey.UpArrow)
                    {
                        indiceMenu--;
                    }
                    else if (tecla == ConsoleKey.Enter) 
                    {
                        if (indiceMenu == 1) 
                        {
                            Console.Clear();
                            color2();
                            Console.WriteLine(" HAZ ENTRADO EN EL SUBMENÚ DOS ");
                            color1();
                            Console.WriteLine(" SALIR                         ");
                            while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter) 
                                ;
                            MostrarTitulo();
                        }
                        else if (indiceMenu == 4) 
                        {
                            string[] titulo = new string[] { 
                                " ELIGE UN IDIOMA    ", " SELECT A LANGUAGE  "
                            };
                            string[] menusIdioma = new string[] { 
                                " ESPAÑOL       ", " ENGLISH       "
                            };
                            int b;
                            Console.Clear();
                            color2();
                            Console.Write(titulo[indiceIdioma]);
    
                            do
                            {
                                for (b = 0; b < menusIdioma.Length; b++)
                                {
                                    Console.SetCursorPosition(2, 2 + b);
                                    if (b == indiceIdioma)
                                        color1();
                                    else
                                        color2();
                                    Console.Write(menusIdioma[b]);
                                }
    
                                tecla = Console.ReadKey(true).Key;
    
                                if (tecla == ConsoleKey.DownArrow)
                                {
                                    indiceIdioma++;
                                }
                                else if (tecla == ConsoleKey.UpArrow)
                                {
                                    indiceIdioma--;
                                }
    
                                if (indiceIdioma >= menusIdioma.Length)
                                    indiceIdioma = 0;
                                else if (indiceIdioma < 0)
                                    indiceIdioma = menusIdioma.Length - 1;
    
                            } while (tecla != ConsoleKey.Enter);
                            tecla = 0;
                            MostrarTitulo();
                        }
                    }
    
                    // Si está en la última opción, salta a la primera.
                    if (indiceMenu >= menus[0].Length)
                    {
                        indiceMenu = 0;
                    }
                    else if (indiceMenu < 0)
                    {   
                        indiceMenu = menus[0].Length - 1; 
                    }
                    
                    // Uso la tecla escape como salida.
                } while (tecla != ConsoleKey.Escape);
            }
    
            private static void color2()
            {
                Console.BackgroundColor = ConsoleColor.Black; // Fondo pantalla.
                Console.ForegroundColor = ConsoleColor.Gray; // Letra.
            }
    
            private static void color1()
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.Gray;
            }
    
            private static void MostrarTitulo() 
            {
                // Título dentro del menú.
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Clear();
                Console.SetCursorPosition(4, 1);
                Console.Write("MENÚ PRINCIPAL");
            }
        }
    }

    Volve las veces que sea necesario a preguntarme lo que quieras

    Saludos

    Pablo

    • Marcado como respuesta Metaconta martes, 25 de febrero de 2020 8:47
    lunes, 24 de febrero de 2020 2:20
  • hola metaconta

    no se si te pueda servir esta libreria https://archive.codeplex.com/?p=tui te pueda servir para tu proposito,.

    • Marcado como respuesta Metaconta martes, 25 de febrero de 2020 8:47
    lunes, 24 de febrero de 2020 13:29

Todas las respuestas

  • Hola Metaconta

    Interesante este programita! Me hace un poco recordar cuando programaba menús en el antiguo Lenguaje C para el antiguo sistema MS-DOS, cuando era joven, aunque no es muy diferente de los menús que uso en mis video juegos, ahora que soy un anciano de 40, la lógica es siempre la misma. 

    Lo primero que hice fue optimizar un poco lo que vos ya habías hecho (o sea escribirlo en muchas menos lineas) y luego agregué lo del Submenú DOS y lo del idioma, pero sólo admite Español e Inglés, porque no se más idiomas. Pero seguramente vos lo podrás completar como necesites o como te parezca.

    using System;
    
    namespace Menu_consola_14_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                
                Console.Title = "Menú de opciones";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 25;
    
                // Y altura.
                Console.WindowHeight = 11;
    
                // Cursor invisible.
                Console.CursorVisible = false;
    
                // Capturar la tecla para validar luego.
                ConsoleKey tecla;
    
                MostrarTitulo();
    
                int a, indiceMenu = 0;
                int indiceIdioma = 0;
                string[][] menus = new string[][] {
                    new string[] {
                        " UNO         ", " DOS         ", " TRES        ", " CUATRO      ", " IDIOMA      ", " ESC = SALIR "
                    },
                    new string[] { 
                        " ONE         ", " TWO         ", " THREE       ", " FOUR        ", " LANGUAGE    ", " ESC = EXIT  "
                    } 
                };
    
                do
                {
                    //******************************************************************
                    //Pinto el menú
                    //Console.Clear(); // Limpiar pantalla.
    
                    for (a = 0; a < menus[0].Length; a++)
                    {
                        Console.SetCursorPosition(2, 3 + a);
                        if (a == indiceMenu)
                            color1();
                        else
                            color2();
                        Console.Write(menus[indiceIdioma][a]);
                    }
    
                    // Fin de pintar el menú.
                    //******************************************************************
    
                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;
    
                    //validar el tipo de tecla
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        indiceMenu++;
                    }
                    else if (tecla == ConsoleKey.UpArrow)
                    {
                        indiceMenu--;
                    }
                    else if (tecla == ConsoleKey.Enter) 
                    {
                        if (indiceMenu == 1) 
                        {
                            Console.Clear();
                            color2();
                            Console.WriteLine(" HAZ ENTRADO EN EL SUBMENÚ DOS ");
                            color1();
                            Console.WriteLine(" SALIR                         ");
                            while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter) 
                                ;
                            MostrarTitulo();
                        }
                        else if (indiceMenu == 4) 
                        {
                            string[] titulo = new string[] { 
                                " ELIGE UN IDIOMA    ", " SELECT A LANGUAGE  "
                            };
                            string[] menusIdioma = new string[] { 
                                " ESPAÑOL       ", " ENGLISH       "
                            };
                            int b;
                            Console.Clear();
                            color2();
                            Console.Write(titulo[indiceIdioma]);
    
                            do
                            {
                                for (b = 0; b < menusIdioma.Length; b++)
                                {
                                    Console.SetCursorPosition(2, 2 + b);
                                    if (b == indiceIdioma)
                                        color1();
                                    else
                                        color2();
                                    Console.Write(menusIdioma[b]);
                                }
    
                                tecla = Console.ReadKey(true).Key;
    
                                if (tecla == ConsoleKey.DownArrow)
                                {
                                    indiceIdioma++;
                                }
                                else if (tecla == ConsoleKey.UpArrow)
                                {
                                    indiceIdioma--;
                                }
    
                                if (indiceIdioma >= menusIdioma.Length)
                                    indiceIdioma = 0;
                                else if (indiceIdioma < 0)
                                    indiceIdioma = menusIdioma.Length - 1;
    
                            } while (tecla != ConsoleKey.Enter);
                            tecla = 0;
                            MostrarTitulo();
                        }
                    }
    
                    // Si está en la última opción, salta a la primera.
                    if (indiceMenu >= menus[0].Length)
                    {
                        indiceMenu = 0;
                    }
                    else if (indiceMenu < 0)
                    {   
                        indiceMenu = menus[0].Length - 1; 
                    }
                    
                    // Uso la tecla escape como salida.
                } while (tecla != ConsoleKey.Escape);
            }
    
            private static void color2()
            {
                Console.BackgroundColor = ConsoleColor.Black; // Fondo pantalla.
                Console.ForegroundColor = ConsoleColor.Gray; // Letra.
            }
    
            private static void color1()
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.Gray;
            }
    
            private static void MostrarTitulo() 
            {
                // Título dentro del menú.
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Clear();
                Console.SetCursorPosition(4, 1);
                Console.Write("MENÚ PRINCIPAL");
            }
        }
    }

    Volve las veces que sea necesario a preguntarme lo que quieras

    Saludos

    Pablo

    • Marcado como respuesta Metaconta martes, 25 de febrero de 2020 8:47
    lunes, 24 de febrero de 2020 2:20
  • hola metaconta

    no se si te pueda servir esta libreria https://archive.codeplex.com/?p=tui te pueda servir para tu proposito,.

    • Marcado como respuesta Metaconta martes, 25 de febrero de 2020 8:47
    lunes, 24 de febrero de 2020 13:29
  • Hola Metaconta

    Interesante este programita! Me hace un poco recordar cuando programaba menús en el antiguo Lenguaje C para el antiguo sistema MS-DOS, cuando era joven, aunque no es muy diferente de los menús que uso en mis video juegos, ahora que soy un anciano de 40, la lógica es siempre la misma. 

    Lo primero que hice fue optimizar un poco lo que vos ya habías hecho (o sea escribirlo en muchas menos lineas) y luego agregué lo del Submenú DOS y lo del idioma, pero sólo admite Español e Inglés, porque no se más idiomas. Pero seguramente vos lo podrás completar como necesites o como te parezca.

    using System;
    
    namespace Menu_consola_14_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                
                Console.Title = "Menú de opciones";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 25;
    
                // Y altura.
                Console.WindowHeight = 11;
    
                // Cursor invisible.
                Console.CursorVisible = false;
    
                // Capturar la tecla para validar luego.
                ConsoleKey tecla;
    
                MostrarTitulo();
    
                int a, indiceMenu = 0;
                int indiceIdioma = 0;
                string[][] menus = new string[][] {
                    new string[] {
                        " UNO         ", " DOS         ", " TRES        ", " CUATRO      ", " IDIOMA      ", " ESC = SALIR "
                    },
                    new string[] { 
                        " ONE         ", " TWO         ", " THREE       ", " FOUR        ", " LANGUAGE    ", " ESC = EXIT  "
                    } 
                };
    
                do
                {
                    //******************************************************************
                    //Pinto el menú
                    //Console.Clear(); // Limpiar pantalla.
    
                    for (a = 0; a < menus[0].Length; a++)
                    {
                        Console.SetCursorPosition(2, 3 + a);
                        if (a == indiceMenu)
                            color1();
                        else
                            color2();
                        Console.Write(menus[indiceIdioma][a]);
                    }
    
                    // Fin de pintar el menú.
                    //******************************************************************
    
                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;
    
                    //validar el tipo de tecla
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        indiceMenu++;
                    }
                    else if (tecla == ConsoleKey.UpArrow)
                    {
                        indiceMenu--;
                    }
                    else if (tecla == ConsoleKey.Enter) 
                    {
                        if (indiceMenu == 1) 
                        {
                            Console.Clear();
                            color2();
                            Console.WriteLine(" HAZ ENTRADO EN EL SUBMENÚ DOS ");
                            color1();
                            Console.WriteLine(" SALIR                         ");
                            while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter) 
                                ;
                            MostrarTitulo();
                        }
                        else if (indiceMenu == 4) 
                        {
                            string[] titulo = new string[] { 
                                " ELIGE UN IDIOMA    ", " SELECT A LANGUAGE  "
                            };
                            string[] menusIdioma = new string[] { 
                                " ESPAÑOL       ", " ENGLISH       "
                            };
                            int b;
                            Console.Clear();
                            color2();
                            Console.Write(titulo[indiceIdioma]);
    
                            do
                            {
                                for (b = 0; b < menusIdioma.Length; b++)
                                {
                                    Console.SetCursorPosition(2, 2 + b);
                                    if (b == indiceIdioma)
                                        color1();
                                    else
                                        color2();
                                    Console.Write(menusIdioma[b]);
                                }
    
                                tecla = Console.ReadKey(true).Key;
    
                                if (tecla == ConsoleKey.DownArrow)
                                {
                                    indiceIdioma++;
                                }
                                else if (tecla == ConsoleKey.UpArrow)
                                {
                                    indiceIdioma--;
                                }
    
                                if (indiceIdioma >= menusIdioma.Length)
                                    indiceIdioma = 0;
                                else if (indiceIdioma < 0)
                                    indiceIdioma = menusIdioma.Length - 1;
    
                            } while (tecla != ConsoleKey.Enter);
                            tecla = 0;
                            MostrarTitulo();
                        }
                    }
    
                    // Si está en la última opción, salta a la primera.
                    if (indiceMenu >= menus[0].Length)
                    {
                        indiceMenu = 0;
                    }
                    else if (indiceMenu < 0)
                    {   
                        indiceMenu = menus[0].Length - 1; 
                    }
                    
                    // Uso la tecla escape como salida.
                } while (tecla != ConsoleKey.Escape);
            }
    
            private static void color2()
            {
                Console.BackgroundColor = ConsoleColor.Black; // Fondo pantalla.
                Console.ForegroundColor = ConsoleColor.Gray; // Letra.
            }
    
            private static void color1()
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.Gray;
            }
    
            private static void MostrarTitulo() 
            {
                // Título dentro del menú.
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Clear();
                Console.SetCursorPosition(4, 1);
                Console.Write("MENÚ PRINCIPAL");
            }
        }
    }

    Volve las veces que sea necesario a preguntarme lo que quieras

    Saludos

    Pablo

    Muchas gracias, funciona bien. Con el tiempo haré preguntas, hay cosas que no capto sobre tu código, para ti es básico. ;)

    Buen trabajo.


    http://electronica-pic.blogspot.com

    martes, 25 de febrero de 2020 8:47