elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Crear solo un modelo de Menú y Submenú
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear solo un modelo de Menú y Submenú  (Leído 3,414 veces)
Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
Crear solo un modelo de Menú y Submenú
« en: 29 Marzo 2020, 21:03 pm »

Hola:

Quiero saber si a estas alturas se puede crear un menú y submenú con la línea de comando de Windows 10, el cmd de siempre. Se que está PowerShell, el sustituto del cmd, pero este es más complicado, nuevo y no entiendo, en realidad, no entiendo ninguno.

Solo se permite usar las flechas del teclado y la tecla Enter para navegar por esos menú y submenús.

Esquema boceto para hacer una idea.


Vídeo:


Saludos.


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #1 en: 30 Marzo 2020, 01:56 am »

Se llama batch el lenguaje que dices. Si buscas batch keydown menu en google te saldrán bastantes resultados.
https://stackoverflow.com/questions/4340191/batch-file-that-detects-keystrokes-how

De todas formas para este tipo de tareas igual te interesa otro lenguaje como pueda ser C#


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #2 en: 30 Marzo 2020, 04:41 am »

- Puedes usar Choice o Set/P, bajo el estándar de Batch, ya que intentar hacer "efectos especiales" en un lenguaje que nativamente no lo soporta es muy engorroso.

- No puedes usar la detección de las Arrow Keys (teclas de flechas) :xD, estas tienen otro uso exclusivo en la consola. Otra opción es usar WSAD como en los juegos.

- En mi caso he utilizado números:



Código
  1. @Echo Off
  2. Color A0
  3. Mode 20, 5
  4.  
  5. :menu_pri_1
  6.  Cls
  7.  Echo.
  8.  Echo   MENU PRINCIPAL
  9.  Echo    vi. 28 feb.
  10.  Pause>NUL
  11. GoTo :menu_pri_2
  12.  
  13. :menu_pri_2
  14.  Cls
  15.  Echo [1] Opcion A
  16.  Echo [2] Opcion B
  17.  Echo [3] Opcion C
  18.  Echo [4] Salir
  19.  Choice /N /C 1234 /M "Elija opcion..."
  20.  If %ErrorLevel% EQU 1 GoTo :menu_a
  21.  If %ErrorLevel% EQU 2 GoTo :menu_b
  22.  If %ErrorLevel% EQU 3 GoTo :menu_c
  23.  If %ErrorLevel% EQU 4 GoTo :menu_pri_1
  24. GoTo :menu_pri_2
  25.  
  26. :menu_a
  27.  Cls
  28.  Echo Estas en Opcion A
  29.  Echo Pulse Enter para
  30.  Echo Salir
  31.  Pause>NUL
  32. GoTo :fin
  33.  
  34. :menu_b
  35.  Cls
  36.  Echo Estas en Opcion B
  37.  Echo [1] Opcion B-1
  38.  Echo [2] Opcion B-2
  39.  Echo [3] Salir
  40.  Choice /N /C 123 /M "Elija opcion..."
  41.  If %ErrorLevel% EQU 1 GoTo :menu_b_1
  42.  If %ErrorLevel% EQU 2 GoTo :menu_b_2
  43.  If %ErrorLevel% EQU 3 GoTo :menu_pri_2
  44. GoTo :menu_b
  45.  
  46. :menu_b_1
  47.  Cls
  48.  Echo Estas en Opcion B-1
  49.  Echo Pulse Enter para
  50.  Echo volver atras
  51.  Pause>NUL
  52. GoTo :menu_b
  53.  
  54. :menu_b_2
  55.  Cls
  56.  Echo Estas en Opcion B-2
  57.  Echo Pulse Enter para
  58.  Echo volver atras
  59.  Pause>NUL
  60. GoTo :menu_b
  61.  
  62. :menu_c
  63.  Cls
  64.  Echo Estas en Opcion C
  65.  Echo [1] Color 1
  66.  Echo [2] Color 2
  67.  Echo [3] Opcion C-1
  68.  Choice /N /C 123 /M "Elija opcion..."
  69.  If %ErrorLevel% EQU 1 GoTo :fin
  70.  If %ErrorLevel% EQU 2 GoTo :fin
  71.  If %ErrorLevel% EQU 3 GoTo :menu_c_1
  72. GoTo :menu_c
  73.  
  74. :menu_c_1
  75.  Cls
  76.  Echo Estas en Opcion C-1
  77.  Echo [1] SI
  78.  Echo [2] NO
  79.  Choice /N /C 12 /M "Elija opcion..."
  80.  If %ErrorLevel% EQU 1 GoTo :menu_c_si
  81.  If %ErrorLevel% EQU 2 GoTo :menu_pri_1
  82. GoTo :menu_c_1
  83.  
  84. :menu_c_si
  85.  Cls
  86.  Echo Estas en Opcion SI
  87.  Echo Pulse Enter para
  88.  Echo volver atras
  89.  Pause>NUL
  90. GoTo menu_c_1
  91.  
  92. :fin
En línea

Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #3 en: 30 Marzo 2020, 05:35 am »

@XSStringManolo Lo tengo hecho con el lenguaje C#. Está tan chapuza lo que he hecho con tantos códigos repetidos, que me da vergüenza publicarlo. Si quieres lo publico aquí el código de C#. Aguanto la vergüenza sea como sea.  :silbar:

@EdePC Me encanta tu trabajo. Me he dado cuenta que no funciona como tiene que funcionar. Hace cosas no deseadas.

Si estoy en la pantalla de inicio, pulso un número, sale el menú, no debería, solo si pulso Enter.
Si pulso el 1 cuando ya estoy en el menú, entras bien, luego tiene que pulsar solo Enter y va al inicio de todo, donde se ve la hora y fecha. No tiene tampoco que cerrarse la ventana nunca.
Son muchos detalles que no está tal como puse en el esquema. Es para que te hagas una idea. Aún así lo que hiciste, buen trabajo.

Ya que dicen que PowerShell es el sustituto del cmd, pues no es compatibl el programa de bat al ps1. DEl CMD al PowerShell.

Gracias a los dos.
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #4 en: 30 Marzo 2020, 12:56 pm »

Si publicas el código C# te ayudamos.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #5 en: 30 Marzo 2020, 14:42 pm »

Hola compañero:

¿Qué tal estás?

Se los paso. Dejo calro que fue guiado por unapersona mayor en el cual su forma de programar no es a objetos que digamos, sino a procedimental o programación clásica, ya que es lo que le enceñaros desde la época de estudiante cuando se programaba en MS-DOS. Ya es la prehistoria. jajaj

Código C#:
Código
  1. using System;
  2.  
  3. namespace Menu_consola_18_cs
  4. {
  5.    class Program
  6.    {
  7.        // Variable general para guardar el > de la última opción que haz entrado
  8.        // en la hora de volver atrás. Por ejemplo:
  9.        private static int guardarOpcion = 0;
  10.        static void Main(string[] args)
  11.        {
  12.            Console.Title = "Menú de opciones";
  13.  
  14.            // Tamaño ventana consola.
  15.            // X anchura.
  16.            Console.WindowWidth = 20;
  17.  
  18.            // Y altura.
  19.            Console.WindowHeight = 5;
  20.  
  21.            // Ocultar cursor.
  22.            Console.CursorVisible = false;
  23.  
  24.            // Fondo verde.
  25.            Console.BackgroundColor = ConsoleColor.Green;
  26.  
  27.            // Letras negras.
  28.            Console.ForegroundColor = ConsoleColor.Black;
  29.  
  30.            MenuPrincipal();
  31.        }
  32.  
  33.        #region Menú principal.
  34.        public static void MenuPrincipal()
  35.        {
  36.            // Almacena la tecla pulsada en la variable.
  37.            ConsoleKey teclaInicial;
  38.  
  39.            // Limpiar pantalla.
  40.            Console.Clear();
  41.  
  42.            // Posición del cursor del título del MENÚ PRINCIPAL.
  43.            Console.SetCursorPosition(0, 0);
  44.  
  45.            // Título.
  46.            Console.Write("   MENÚ PRINCIPAL   ");
  47.  
  48.            // Pocisión de la hora.
  49.            Console.SetCursorPosition(4, 2);
  50.  
  51.            // Formato numérico dd/MM/yyyy.
  52.            Console.Write(DateTime.Now.ToString("ddd dd MMM"));
  53.  
  54.            // Almacena en la variable una tecla pulsada.
  55.            teclaInicial = Console.ReadKey(true).Key;
  56.  
  57.            // ¿Haz pulsado la tecla Enter?
  58.            if (teclaInicial == ConsoleKey.Enter)
  59.            {
  60.                // Sí. Se ejecuta esta función.
  61.                MenuOpciones();
  62.            }
  63.        }
  64.        #endregion
  65.  
  66.        #region Menú de opciones principales.
  67.        public static void MenuOpciones()
  68.        {
  69.            // Contador de teclas y navegador.
  70.            int opcion = 0;
  71.            opcion = guardarOpcion;
  72.  
  73.            // Capturar tecla para luego validar.
  74.            ConsoleKey tecla;
  75.  
  76.            while (true)
  77.            {
  78.                //******************************************************************
  79.                // Dibujo el menú principal.
  80.  
  81.                // Limpiar pantalla.
  82.                Console.Clear();
  83.  
  84.                switch (opcion)
  85.                {
  86.                    case 0:
  87.                        Console.SetCursorPosition(0, 0);
  88.                        Console.Write("> Opción A.         ");
  89.                        Console.SetCursorPosition(0, 1);
  90.                        Console.Write("  Opción B.         ");
  91.                        Console.SetCursorPosition(0, 2);
  92.                        Console.Write("  Opción C.         ");
  93.                        Console.SetCursorPosition(0, 3);
  94.                        Console.Write("  Salir.            ");
  95.                        break;
  96.                    case 1:
  97.                        Console.SetCursorPosition(0, 0);
  98.                        Console.Write("  Opción A.         ");
  99.                        Console.SetCursorPosition(0, 1);
  100.                        Console.Write("> Opción B.         ");
  101.                        Console.SetCursorPosition(0, 2);
  102.                        Console.Write("  Opción C.         ");
  103.                        Console.SetCursorPosition(0, 3);
  104.                        Console.Write("  Salir.            ");
  105.                        break;
  106.                    case 2:
  107.                        Console.SetCursorPosition(0, 0);
  108.                        Console.Write("  Opción A.         ");
  109.                        Console.SetCursorPosition(0, 1);
  110.                        Console.Write("  Opción B.         ");
  111.                        Console.SetCursorPosition(0, 2);
  112.                        Console.Write("> Opción C.         ");
  113.                        Console.SetCursorPosition(0, 3);
  114.                        Console.Write("  Salir.            ");
  115.                        break;
  116.                    case 3:
  117.                        Console.SetCursorPosition(0, 0);
  118.                        Console.Write("  Opción A.         ");
  119.                        Console.SetCursorPosition(0, 1);
  120.                        Console.Write("  Opción B.         ");
  121.                        Console.SetCursorPosition(0, 2);
  122.                        Console.Write("  Opción C.         ");
  123.                        Console.SetCursorPosition(0, 3);
  124.                        Console.Write("> Salir.            ");
  125.                        break;
  126.                    default:
  127.                        Console.Write("Fuera de rango.     ");
  128.                        break;
  129.                }
  130.  
  131.                // Fin de pintar el menú principal.
  132.                //******************************************************************
  133.  
  134.                // Leer tecla ingresada por el usuario.
  135.                tecla = Console.ReadKey(true).Key;
  136.  
  137.                // Validar el tipo de tecla.
  138.                if (tecla == ConsoleKey.Enter)
  139.                {
  140.                    switch (opcion)
  141.                    {
  142.                        case 0:
  143.                            OpcionA();
  144.                            break;
  145.                        case 1:
  146.                            OpcionB();
  147.                            break;
  148.                        case 2:
  149.                            OpcionC();
  150.                            break;
  151.                        case 3:
  152.                            guardarOpcion = 0;
  153.                            MenuPrincipal();
  154.                            break;
  155.                        default:
  156.                            break;
  157.                    }
  158.                }
  159.  
  160.                // Flecha abajo del teclado.
  161.                if (tecla == ConsoleKey.DownArrow)
  162.                {
  163.                    opcion++;
  164.                }
  165.  
  166.                // Flecha arriba del teclado.
  167.                if (tecla == ConsoleKey.UpArrow)
  168.                {
  169.                    opcion--;
  170.                }
  171.  
  172.                // Si está en la última opción del menú, salta a la primera.
  173.                if (opcion > 3)
  174.                {
  175.                    opcion = 0;
  176.                }
  177.  
  178.                // Si está en la primera posición del menú, salta a la última.
  179.                if (opcion < 0)
  180.                {
  181.                    opcion = 3;
  182.                }
  183.            }
  184.        }
  185.        #endregion
  186.  
  187.        #region Opción A (0).
  188.        public static void OpcionA()
  189.        {
  190.            ConsoleKey teclaOpcionA;
  191.            Console.Clear();
  192.            do
  193.            {
  194.                Console.SetCursorPosition(0, 0);
  195.                Console.WriteLine("Estás en Opción A.");
  196.                Console.SetCursorPosition(0, 2);
  197.                Console.WriteLine("Pulse Enter para");
  198.                Console.SetCursorPosition(0, 3);
  199.                Console.WriteLine("Salir.");
  200.  
  201.                // Almacena el teclado pulsado en la variable teclaSubMenuA.
  202.                teclaOpcionA = Console.ReadKey(true).Key;
  203.  
  204.            } while (teclaOpcionA != ConsoleKey.Enter);
  205.        }
  206.        #endregion
  207.  
  208.        #region Opción B (1).
  209.        public static void OpcionB()
  210.        {
  211.            // Contador de teclas y navegador.
  212.            int opcionB = 0;
  213.  
  214.            // Capturar tecla para luego validar.
  215.            ConsoleKey teclaOpcionB;
  216.  
  217.            while (true)
  218.            {
  219.                switch (opcionB)
  220.                {
  221.                    case 0:
  222.                        Console.SetCursorPosition(0, 0);
  223.                        Console.WriteLine("Estás en Opción B.  ");
  224.                        Console.SetCursorPosition(0, 1);
  225.                        Console.WriteLine("> SubOpción B-1.    ");
  226.                        Console.SetCursorPosition(0, 2);
  227.                        Console.WriteLine("  SubOpción B-2     ");
  228.                        Console.SetCursorPosition(0, 3);
  229.                        Console.WriteLine("  Salir.            ");
  230.                        break;
  231.                    case 1:
  232.                        Console.SetCursorPosition(0, 0);
  233.                        Console.WriteLine("Estás en Opción B.  ");
  234.                        Console.SetCursorPosition(0, 1);
  235.                        Console.WriteLine("  SubOpción B-1.    ");
  236.                        Console.SetCursorPosition(0, 2);
  237.                        Console.WriteLine("> SubOpción B-2     ");
  238.                        Console.SetCursorPosition(0, 3);
  239.                        Console.WriteLine("  Salir.            ");
  240.                        break;
  241.                    case 2:
  242.                        Console.SetCursorPosition(0, 0);
  243.                        Console.WriteLine("Estás en Opción B.  ");
  244.                        Console.SetCursorPosition(0, 1);
  245.                        Console.WriteLine("  SubOpción B-1.    ");
  246.                        Console.SetCursorPosition(0, 2);
  247.                        Console.WriteLine("  SubOpción B-2     ");
  248.                        Console.SetCursorPosition(0, 3);
  249.                        Console.WriteLine("> Salir.            ");
  250.                        break;
  251.                    default:
  252.                        Console.Write("Fuera de rango.     ");
  253.                        break;
  254.                }
  255.  
  256.                // Leer tecla ingresada por el usuario.
  257.                teclaOpcionB = Console.ReadKey(true).Key;
  258.  
  259.                // Validar el tipo de tecla.
  260.                if (teclaOpcionB == ConsoleKey.Enter)
  261.                {
  262.                    switch (opcionB)
  263.                    {
  264.                        case 0:
  265.                            OpcionB1();
  266.                            break;
  267.                        case 1:
  268.                            OpcionB2();
  269.                            break;
  270.                        case 2:
  271.                            guardarOpcion = 1;
  272.                            MenuOpciones();
  273.                            break;
  274.                        default:
  275.                            Console.Write("Fuera de rango.     ");
  276.                            break;
  277.                    }
  278.                }
  279.  
  280.                if (teclaOpcionB == ConsoleKey.DownArrow)
  281.                {
  282.                    opcionB++;
  283.                }
  284.  
  285.                if (teclaOpcionB == ConsoleKey.UpArrow)
  286.                {
  287.                    opcionB--;
  288.                }
  289.  
  290.                // Si está en la última opción, salta a la primera.
  291.                if (opcionB > 2)
  292.                {
  293.                    opcionB = 0;
  294.                }
  295.  
  296.                // Si está en la primera posición, salta a la última.
  297.                if (opcionB < 0)
  298.                {
  299.                    opcionB = 2;
  300.                }
  301.            }
  302.        }
  303.  
  304.        #endregion
  305.  
  306.        #region Opcion B-1.
  307.        public static void OpcionB1()
  308.        {
  309.            ConsoleKey teclaOpcionB1;
  310.            Console.Clear();
  311.            do
  312.            {
  313.                Console.SetCursorPosition(0, 0);
  314.                Console.WriteLine("Estás en Opción B-1.");
  315.                Console.SetCursorPosition(0, 2);
  316.                Console.WriteLine("Pulse Enter para    ");
  317.                Console.SetCursorPosition(0, 3);
  318.                Console.WriteLine("volver atrás.       ");
  319.  
  320.                // Almacena el teclado pulsado en la variable teclaSubMenuA.
  321.                teclaOpcionB1 = Console.ReadKey(true).Key;
  322.  
  323.            } while (teclaOpcionB1 != ConsoleKey.Enter);
  324.        }
  325.        #endregion
  326.  
  327.        #region Opcion B-2.
  328.        public static void OpcionB2()
  329.        {
  330.            ConsoleKey teclaOpcionB2;
  331.            Console.Clear();
  332.            do
  333.            {
  334.                Console.SetCursorPosition(0, 0);
  335.                Console.WriteLine("Estás en Opción B-2.");
  336.                Console.SetCursorPosition(0, 2);
  337.                Console.WriteLine("Pulse Enter para    ");
  338.                Console.SetCursorPosition(0, 3);
  339.                Console.WriteLine("volver atrás.       ");
  340.  
  341.                // Almacena el teclado pulsado en la variable teclaSubMenuA.
  342.                teclaOpcionB2 = Console.ReadKey(true).Key;
  343.  
  344.            } while (teclaOpcionB2 != ConsoleKey.Enter);
  345.        }
  346.        #endregion
  347.  
  348.        #region Opción C (2).
  349.        public static void OpcionC()
  350.        {
  351.            // Contador de teclas y navegador.
  352.            int opcionC = 0;
  353.  
  354.            // Capturar tecla para luego validar.
  355.            ConsoleKey teclaOpcionC;
  356.            Console.Clear();
  357.  
  358.            while(true)
  359.            {
  360.                switch (opcionC)
  361.                {
  362.                    case 0:
  363.                        Console.SetCursorPosition(0, 0);
  364.                        Console.WriteLine("Estás en Opción C.  ");
  365.                        Console.SetCursorPosition(0, 1);
  366.                        Console.WriteLine("> Color 1.          ");
  367.                        Console.SetCursorPosition(0, 2);
  368.                        Console.WriteLine("  Color 2.          ");
  369.                        Console.SetCursorPosition(0, 3);
  370.                        Console.WriteLine("  Opción C-1.       ");
  371.                        break;
  372.                    case 1:
  373.                        Console.SetCursorPosition(0, 0);
  374.                        Console.WriteLine("Estás en Opción C.  ");
  375.                        Console.SetCursorPosition(0, 1);
  376.                        Console.WriteLine("  Color 1.          ");
  377.                        Console.SetCursorPosition(0, 2);
  378.                        Console.WriteLine("> Color 2.          ");
  379.                        Console.SetCursorPosition(0, 3);
  380.                        Console.WriteLine("  Opción C-1.       ");
  381.                        break;
  382.                    case 2:
  383.                        Console.SetCursorPosition(0, 0);
  384.                        Console.WriteLine("Estás en Opción C.  ");
  385.                        Console.SetCursorPosition(0, 1);
  386.                        Console.WriteLine("  Color 1.          ");
  387.                        Console.SetCursorPosition(0, 2);
  388.                        Console.WriteLine("  Color 2.          ");
  389.                        Console.SetCursorPosition(0, 3);
  390.                        Console.WriteLine("> Opción C-1.       ");
  391.                        break;
  392.                    case 3:
  393.                        Console.SetCursorPosition(0, 0);
  394.                        Console.WriteLine("> Color 3.          ");
  395.                        Console.SetCursorPosition(0, 1);
  396.                        Console.WriteLine("  Color 4.          ");
  397.                        Console.SetCursorPosition(0, 2);
  398.                        Console.WriteLine("  Color 5.          ");
  399.                        Console.SetCursorPosition(0, 3);
  400.                        Console.WriteLine("  Salir.            ");
  401.                        break;
  402.                    case 4:
  403.                        Console.SetCursorPosition(0, 0);
  404.                        Console.WriteLine("  Color 3.          ");
  405.                        Console.SetCursorPosition(0, 1);
  406.                        Console.WriteLine("> Color 4.          ");
  407.                        Console.SetCursorPosition(0, 2);
  408.                        Console.WriteLine("  Color 5.          ");
  409.                        Console.SetCursorPosition(0, 3);
  410.                        Console.WriteLine("  Salir.            ");
  411.                        break;
  412.                    case 5:
  413.                        Console.SetCursorPosition(0, 0);
  414.                        Console.WriteLine("  Color 3.          ");
  415.                        Console.SetCursorPosition(0, 1);
  416.                        Console.WriteLine("  Color 4.          ");
  417.                        Console.SetCursorPosition(0, 2);
  418.                        Console.WriteLine("> Color 5.          ");
  419.                        Console.SetCursorPosition(0, 3);
  420.                        Console.WriteLine("  Salir.            ");
  421.                        break;
  422.                    case 6:
  423.                        Console.SetCursorPosition(0, 0);
  424.                        Console.WriteLine("  Color 3.          ");
  425.                        Console.SetCursorPosition(0, 1);
  426.                        Console.WriteLine("  Color 4.          ");
  427.                        Console.SetCursorPosition(0, 2);
  428.                        Console.WriteLine("  Color 5.          ");
  429.                        Console.SetCursorPosition(0, 3);
  430.                        Console.WriteLine("> Salir.            ");
  431.                        break;
  432.  
  433.                    default:
  434.                        Console.Write("Fuera de rango.     ");
  435.                        break;
  436.                }
  437.  
  438.                // Leer tecla ingresada por el usuario.
  439.                teclaOpcionC = Console.ReadKey(true).Key;
  440.  
  441.                // Validar el tipo de tecla.
  442.                if (teclaOpcionC == ConsoleKey.Enter)
  443.                {
  444.                    switch (opcionC)
  445.                    {
  446.                        case 0:
  447.                            // Fondo azul.
  448.                            Console.BackgroundColor = ConsoleColor.Blue;
  449.  
  450.                            // Letras blancas.
  451.                            Console.ForegroundColor = ConsoleColor.White;
  452.                            break;
  453.                        case 1:
  454.                            // Fondo verde.
  455.                            Console.BackgroundColor = ConsoleColor.Green;
  456.  
  457.                            // Letras negras.
  458.                            Console.ForegroundColor = ConsoleColor.Black;
  459.                            break;
  460.                        case 2:
  461.                            OpcionC1();
  462.                            break;
  463.                        case 3:
  464.                            // Fondo negro.
  465.                            Console.BackgroundColor = ConsoleColor.Black;
  466.  
  467.                            // Letras rojo.
  468.                            Console.ForegroundColor = ConsoleColor.Red;
  469.                            break;
  470.                        case 4:
  471.                            // Fondo negro.
  472.                            Console.BackgroundColor = ConsoleColor.Black;
  473.  
  474.                            // Letras rojo.
  475.                            Console.ForegroundColor = ConsoleColor.Yellow;
  476.                            break;
  477.                        case 5:
  478.                            // Fondo negro.
  479.                            Console.BackgroundColor = ConsoleColor.Red;
  480.  
  481.                            // Letras rojo.
  482.                            Console.ForegroundColor = ConsoleColor.DarkRed;
  483.                            break;
  484.                        case 6:
  485.                            guardarOpcion = 2;
  486.                            MenuOpciones();
  487.                            break;
  488.                        default:
  489.                            Console.Write("Fuera de rango.     ");
  490.                            break;
  491.                    }
  492.                }
  493.  
  494.                if (teclaOpcionC == ConsoleKey.DownArrow)
  495.                {
  496.                    opcionC++;
  497.                }
  498.  
  499.                if (teclaOpcionC == ConsoleKey.UpArrow)
  500.                {
  501.                    opcionC--;
  502.                }
  503.  
  504.                // Si está en la última opción, salta a la primera.
  505.                if (opcionC > 6)
  506.                {
  507.                    opcionC = 0;
  508.                }
  509.  
  510.                // Si está en la primera posición, salta a la última.
  511.                if (opcionC < 0)
  512.                {
  513.                    opcionC = 6;
  514.                }
  515.            }
  516.        }
  517.        #endregion
  518.  
  519.        #region OpcionC-1.
  520.        public static void OpcionC1()
  521.        {
  522.            // Contador de teclas y navegador.
  523.            int opcionC1 = 0;
  524.  
  525.            // Capturar tecla para luego validar.
  526.            ConsoleKey teclaOpcionC1;
  527.            Console.Clear();
  528.  
  529.            while(true)
  530.            {
  531.                Console.Clear();
  532.  
  533.                switch (opcionC1)
  534.                {
  535.                    case 0:
  536.                        Console.SetCursorPosition(0, 0);
  537.                        Console.WriteLine("Estás en Opción C-1.");
  538.                        Console.SetCursorPosition(0, 2);
  539.                        Console.WriteLine("  SI");
  540.                        Console.SetCursorPosition(16, 2);
  541.                        Console.WriteLine("> NO");
  542.                        break;
  543.                    case 1:
  544.                        Console.SetCursorPosition(0, 0);
  545.                        Console.WriteLine("Estás en Opción C-1.");
  546.                        Console.SetCursorPosition(0, 2);
  547.                        Console.WriteLine("> SI");
  548.                        Console.SetCursorPosition(16, 2);
  549.                        Console.WriteLine("  NO");
  550.                        break;
  551.                    default:
  552.                        Console.Write("Fuera de rango.     ");
  553.                        break;
  554.                }
  555.  
  556.                // Leer tecla ingresada por el usuario.
  557.                teclaOpcionC1 = Console.ReadKey(true).Key;
  558.  
  559.                // Validar el tipo de tecla.
  560.                if (teclaOpcionC1 == ConsoleKey.Enter)
  561.                {
  562.                    switch (opcionC1)
  563.                    {
  564.                        case 0:
  565.                            guardarOpcion = 2;
  566.                            MenuPrincipal();
  567.                            //Console.Clear();
  568.                            break;
  569.                        case 1:
  570.                            OpcionSI();
  571.                            break;
  572.                        default:
  573.                            Console.Write("Fuera de rango.     ");
  574.                            break;
  575.                    }
  576.                }
  577.  
  578.                // Flecha derecha.
  579.                if (teclaOpcionC1 == ConsoleKey.RightArrow)
  580.                {
  581.                    opcionC1++;
  582.                }
  583.  
  584.                // Flecha izquierda.
  585.                if (teclaOpcionC1 == ConsoleKey.LeftArrow)
  586.                {
  587.                    opcionC1--;
  588.                }
  589.  
  590.                // Si está en la última opción, salta a la primera.
  591.                if (opcionC1 > 1)
  592.                {
  593.                    opcionC1 = 0;
  594.                }
  595.  
  596.                // Si está en la primera posición, salta a la última.
  597.                if (opcionC1 < 0)
  598.                {
  599.                    opcionC1 = 1;
  600.                }
  601.            }
  602.        }
  603.        #endregion
  604.  
  605.        #region opcionSI del sub menú C-1.
  606.        public static void OpcionSI()
  607.        {
  608.            ConsoleKey teclaOpcionB1;
  609.            Console.Clear();
  610.            do
  611.            {
  612.                Console.SetCursorPosition(0, 0);
  613.                Console.WriteLine("Estás en Opción SÍ.");
  614.                Console.SetCursorPosition(0, 2);
  615.                Console.WriteLine("Pulse Enter para    ");
  616.                Console.SetCursorPosition(0, 3);
  617.                Console.WriteLine("volver atrás.       ");
  618.  
  619.                // Almacena el teclado pulsado en la variable teclaOpciónB1.
  620.                teclaOpcionB1 = Console.ReadKey(true).Key;
  621.  
  622.            } while (teclaOpcionB1 != ConsoleKey.Enter);
  623.        }
  624.        #endregion
  625.    }
  626. }

Ya dije que el código es larrrrrrrrrrgo y horrible.

Pero.....

Funciona, ajajjajajajjaja.

Lo que no quiero programar así, tengo que mejorar sea como sea para hacer las cosas bien desde el principio.
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #6 en: 30 Marzo 2020, 23:37 pm »

No tienes mucho problema. Utiliza funciones en lugar de todo el código repetido. Ya las tienes usadas en el propio código y tienes muchos ejemplos. Pasa la opción de cada switch por parámetro.

Declaración:
public static void SeleccionarOpcion(int opcion) {

switch (opcion)
...

}

Llamadas:
SeleccionarOpcion(opcion);               


No tiene mucho más. Si tienes dudas chequea ejemplos y tutos.

En los default te sobra el break después. El break se utiliza para escapar del scope/alcance del swtich. Tras el default se sale del cuerpo del switch.

Mas alante tienes una funcion distinta para cada trozo de código similar. En lugar de eso debes declarar una única función y la diferencia que tienes entre ambas la pasas como parámetro. Por ejemplo en lugar de:
sumarUnoYDos();
sumarDosYCuatro();
sumarSieteNueveYVeintiocho();

Haces una única función:
sumar(1, 2);
sumar(2, 4);
sumar(7, 9, 28);

Esto te ahorra código, hace el código más sencillo y utilizas menos memoria, más rápido por el caché, etc.


No te preocupes si no te sale al principio. Recuerdo perfectisamente escribir códigos exactamente iguales a los tuyos. Juega con las funciones y en cuanto las entiendas guay será una de las bases más fuertes en tu estilo de programación.
Solo cuestión de tiempo y programar más y más.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
Re: Crear solo un modelo de Menú y Submenú
« Respuesta #7 en: 31 Marzo 2020, 06:24 am »

Gracias por los consejos.

En caunto al switch, si tiene break  al final. El ejemplo lo saqué de este enlace.

En el código general, tendré que empezar desde cero. A ver si me sale como Dios manda.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ToolBar con Menú y SubMenú
Programación Visual Basic
ssccaann43 © 4 1,893 Último mensaje 14 Noviembre 2008, 15:59 pm
por ssccaann43 ©
Crear nueva entrada en menú contextual de CREAR ARCHIVO TXT « 1 2 3 »
Windows
Esgrimidor 25 22,338 Último mensaje 30 Junio 2012, 08:26 am
por Eleкtro
Conocer la marca y modelo de un dispositivo solo con su MAC?
Dudas Generales
aratzpotrotxiki 1 4,961 Último mensaje 22 Agosto 2017, 18:23 pm
por engel lex
Xiaomi Mi Router 4Q, nuevo modelo económico por sólo 12 euros
Noticias
wolfbcn 0 4,909 Último mensaje 18 Junio 2018, 15:35 pm
por wolfbcn
Raspberry Pi 3 Model A+: nuevo modelo barato por sólo 26 euros
Noticias
wolfbcn 0 1,486 Último mensaje 15 Noviembre 2018, 14:57 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines