PDA

Ver la Versión Completa : Menús y submenús en consola C#


REHome
28-02-2020, 19:55:46
Hola:
Quiero hacer un menús con submenús como este en la consola C# 2019.

https://www.subeimagenes.com/img/menus-2101154.PNG (https://www.subeimagenes.com/img/menus-2101154.PNG)

Ver zoom (https://www.subeimagenes.com/img/menus-2101154.PNG).

El código que he hecho es en un único archivo, para mi gusto, me parece demasiados códigos. Mi idea es usar dolo Flecha arriba, abajo, izquierda, derecha y Enter del teclado. La otra idea, es crear de forma muy fácil muchos menús y submenos que conecte de manera fácil y cómoda de programar, incluso para actualizacones que se entiendan bien, como añadir más sub menús y menús.

Dejo el código aquí abajo, seguro que hay mejores formas de hacerlo.

¿Cómo lo harías tu?

Código C#:
using System;

namespace Menu_consola_16_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 = 20;

// Y altura.
Console.WindowHeight = 5;

// Oculto el cursor.
Console.CursorVisible = false;

// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;

// Fondo verde.
Console.BackgroundColor = ConsoleColor.Green;

// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;

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.
public static 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(0, 0);
Console.Write("> Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write("> Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write("> Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write("> Salir. ");
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

#region Opción A (0).
public static void OpcionA()
{
ConsoleKey teclaOpcionA;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción A.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para");
Console.SetCursorPosition(0, 3);
Console.WriteLine("Salir.");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionA = Console.ReadKey(true).Key;

} while (teclaOpcionA != ConsoleKey.Enter);
}
#endregion

#region Opción B (1).
public static void OpcionB()
{
// Contador de teclas y navegador.
int opcionB = 0;
bool salirB = false;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionB;
Console.Clear();
do
{
switch (opcionB)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Salir. ");
break;
default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionB = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionB == ConsoleKey.Enter)
{
switch (opcionB)
{
case 0:
OpcionB1();
break;
case 1:
OpcionB2();
break;
case 2:
salirB = true;
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

if (teclaOpcionB == ConsoleKey.DownArrow)
{
opcionB++;
}

if (teclaOpcionB == ConsoleKey.UpArrow)
{
opcionB--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionB < 0)
{
opcionB = 2;
}
} while (salirB == false);
}
#endregion

#region Opcion B-1.
public static void OpcionB1()
{
ConsoleKey teclaOpcionB1;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionB1 = Console.ReadKey(true).Key;

} while (teclaOpcionB1 != ConsoleKey.Enter);
}
#endregion

#region Opcion B-2.
public static void OpcionB2()
{
ConsoleKey teclaOpcionB2;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B-2.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionB2 = Console.ReadKey(true).Key;

} while (teclaOpcionB2 != ConsoleKey.Enter);
}
#endregion

#region Opción C (2).
public static void OpcionC()
{
// Contador de teclas y navegador.
int opcionC = 0;
bool salirC = false;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionC;
Console.Clear();
do
{
switch (opcionC)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Opción C-1. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Opción C-1. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Opción C-1. ");
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.WriteLine("> Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 4:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 5:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 6:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Salir. ");
break;

default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionC = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionC == ConsoleKey.Enter)
{
switch (opcionC)
{
case 0:
// Fondo azul.
Console.BackgroundColor = ConsoleColor.Blue;

// Letras blancas.
Console.ForegroundColor = ConsoleColor.White;
break;
case 1:
// Fondo verde.
Console.BackgroundColor = ConsoleColor.Green;

// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;
break;
case 2:
OpcionC1();
break;
case 3:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Black;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.Red;
break;
case 4:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Black;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.Yellow;
break;
case 5:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Red;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.DarkRed;
break;
case 6:
salirC = true;
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

if (teclaOpcionC == ConsoleKey.DownArrow)
{
opcionC++;
}

if (teclaOpcionC == ConsoleKey.UpArrow)
{
opcionC--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionC < 0)
{
opcionC = 6;
}
} while (salirC == false);
}
#endregion

#region OpcionC-1.
public static void OpcionC1()
{
// Contador de teclas y navegador.
int opcionC1 = 0;
bool salirC1 = false;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionC1;
Console.Clear();
do
{
Console.Clear();

switch (opcionC1)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SI");
Console.SetCursorPosition(16, 2);
Console.WriteLine("> NO");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> SI");
Console.SetCursorPosition(16, 2);
Console.WriteLine(" NO");
break;
default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionC1 = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionC1 == ConsoleKey.Enter)
{
switch (opcionC1)
{
case 0:
MenuPrincipal();
Console.Clear();
break;
case 1:
OpcionSI();
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

// Flecha derecha.
if (teclaOpcionC1 == ConsoleKey.RightArrow)
{
opcionC1++;
}

// Flecha izquierda.
if (teclaOpcionC1 == ConsoleKey.LeftArrow)
{
opcionC1--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionC1 < 0)
{
opcionC1 = 1;
}
} while (salirC1 == false);
}
#endregion

#region opcionSI del sub menú C-1.
public static void OpcionSI()
{
ConsoleKey teclaOpcionB1;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción SÍ.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaOpciónB1.
teclaOpcionB1 = Console.ReadKey(true).Key;

} while (teclaOpcionB1 != ConsoleKey.Enter);
}
#endregion
}
}


Saludos.

Casimiro Notevi
28-02-2020, 20:00:16
¿No hay componentes para menús?

REHome
29-02-2020, 07:42:05
Hola:

¿En qué sentido te refieres componentes?

Este menú y submenú es de prueba por ahora, lo que le veo mucho código para lo sencillo que es en apariencia.

Lo he mejorado un poco.
namespace Menu_consola_18_cs
{
class Program
{
// Variable general para guardar el > de la última opción que haz entrado
// en la hora de volver atrás. Por ejemplo:
private static int guardarOpcion = 0;
static void Main(string[] args)
{
Console.Title = "Menú de opciones";

// Tamaño ventana consola.
// X anchura.
Console.WindowWidth = 20;

// Y altura.
Console.WindowHeight = 5;

// Oculto el cursor.
Console.CursorVisible = false;

// Fondo verde.
Console.BackgroundColor = ConsoleColor.Green;

// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;

MenuPrincipal();
}

#region Menú principal.
public static void MenuPrincipal()
{
// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;

// 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.
MenuOpciones();
}
}
#endregion

#region Menú de opciones principales.
public static void MenuOpciones()
{
// Contador de teclas y navegador.
int opcion = 0;
opcion = guardarOpcion;

// Capturar tecla para luego validar.
ConsoleKey tecla;

while (true)
{
//******************************************************************
// Dibujo el menú principal.

// Limpiar pantalla.
Console.Clear();

switch (opcion)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.Write("> Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write("> Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write("> Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write(" Salir. ");
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.Write(" Opción A. ");
Console.SetCursorPosition(0, 1);
Console.Write(" Opción B. ");
Console.SetCursorPosition(0, 2);
Console.Write(" Opción C. ");
Console.SetCursorPosition(0, 3);
Console.Write("> Salir. ");
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:
guardarOpcion = 0;
MenuPrincipal();
break;
default:
break;
}
}

// Flecha abajo del teclado.
if (tecla == ConsoleKey.DownArrow)
{
opcion++;
}

// Flecha arriba del teclado.
if (tecla == ConsoleKey.UpArrow)
{
opcion--;
}

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

// Si está en la primera posición del menú, salta a la última.
if (opcion < 0)
{
opcion = 3;
}
}
}
#endregion

#region Opción A (0).
public static void OpcionA()
{
ConsoleKey teclaOpcionA;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción A.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para");
Console.SetCursorPosition(0, 3);
Console.WriteLine("Salir.");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionA = Console.ReadKey(true).Key;

} while (teclaOpcionA != ConsoleKey.Enter);
}
#endregion

#region Opción B (1).
public static void OpcionB()
{
// Contador de teclas y navegador.
int opcionB = 0;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionB;

while (true)
{
switch (opcionB)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" SubOpción B-1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SubOpción B-2 ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Salir. ");
break;
default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionB = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionB == ConsoleKey.Enter)
{
switch (opcionB)
{
case 0:
OpcionB1();
break;
case 1:
OpcionB2();
break;
case 2:
guardarOpcion = 1;
MenuOpciones();
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

if (teclaOpcionB == ConsoleKey.DownArrow)
{
opcionB++;
}

if (teclaOpcionB == ConsoleKey.UpArrow)
{
opcionB--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionB < 0)
{
opcionB = 2;
}
}
}

#endregion

#region Opcion B-1.
public static void OpcionB1()
{
ConsoleKey teclaOpcionB1;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionB1 = Console.ReadKey(true).Key;

} while (teclaOpcionB1 != ConsoleKey.Enter);
}
#endregion

#region Opcion B-2.
public static void OpcionB2()
{
ConsoleKey teclaOpcionB2;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción B-2.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaSubMenuA.
teclaOpcionB2 = Console.ReadKey(true).Key;

} while (teclaOpcionB2 != ConsoleKey.Enter);
}
#endregion

#region Opción C (2).
public static void OpcionC()
{
// Contador de teclas y navegador.
int opcionC = 0;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionC;
Console.Clear();

while(true)
{
switch (opcionC)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Opción C-1. ");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Opción C-1. ");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 1. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 2. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Opción C-1. ");
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.WriteLine("> Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 4:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine("> Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 5:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(" Salir. ");
break;
case 6:
Console.SetCursorPosition(0, 0);
Console.WriteLine(" Color 3. ");
Console.SetCursorPosition(0, 1);
Console.WriteLine(" Color 4. ");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" Color 5. ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("> Salir. ");
break;

default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionC = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionC == ConsoleKey.Enter)
{
switch (opcionC)
{
case 0:
// Fondo azul.
Console.BackgroundColor = ConsoleColor.Blue;

// Letras blancas.
Console.ForegroundColor = ConsoleColor.White;
break;
case 1:
// Fondo verde.
Console.BackgroundColor = ConsoleColor.Green;

// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;
break;
case 2:
OpcionC1();
break;
case 3:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Black;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.Red;
break;
case 4:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Black;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.Yellow;
break;
case 5:
// Fondo negro.
Console.BackgroundColor = ConsoleColor.Red;

// Letras rojo.
Console.ForegroundColor = ConsoleColor.DarkRed;
break;
case 6:
guardarOpcion = 2;
MenuOpciones();
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

if (teclaOpcionC == ConsoleKey.DownArrow)
{
opcionC++;
}

if (teclaOpcionC == ConsoleKey.UpArrow)
{
opcionC--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionC < 0)
{
opcionC = 6;
}
}
}
#endregion

#region OpcionC-1.
public static void OpcionC1()
{
// Contador de teclas y navegador.
int opcionC1 = 0;

// Capturar tecla para luego validar.
ConsoleKey teclaOpcionC1;
Console.Clear();

while(true)
{
Console.Clear();

switch (opcionC1)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine(" SI");
Console.SetCursorPosition(16, 2);
Console.WriteLine("> NO");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción C-1.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("> SI");
Console.SetCursorPosition(16, 2);
Console.WriteLine(" NO");
break;
default:
Console.Write("Fuera de rango. ");
break;
}

// Leer tecla ingresada por el usuario.
teclaOpcionC1 = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (teclaOpcionC1 == ConsoleKey.Enter)
{
switch (opcionC1)
{
case 0:
guardarOpcion = 2;
MenuPrincipal();
//Console.Clear();
break;
case 1:
OpcionSI();
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}

// Flecha derecha.
if (teclaOpcionC1 == ConsoleKey.RightArrow)
{
opcionC1++;
}

// Flecha izquierda.
if (teclaOpcionC1 == ConsoleKey.LeftArrow)
{
opcionC1--;
}

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

// Si está en la primera posición, salta a la última.
if (opcionC1 < 0)
{
opcionC1 = 1;
}
}
}
#endregion

#region opcionSI del sub menú C-1.
public static void OpcionSI()
{
ConsoleKey teclaOpcionB1;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.WriteLine("Estás en Opción SÍ.");
Console.SetCursorPosition(0, 2);
Console.WriteLine("Pulse Enter para ");
Console.SetCursorPosition(0, 3);
Console.WriteLine("volver atrás. ");

// Almacena el teclado pulsado en la variable teclaOpciónB1.
teclaOpcionB1 = Console.ReadKey(true).Key;

} while (teclaOpcionB1 != ConsoleKey.Enter);
}
#endregion
}
}