[ Foro de C# ]

Menu multiple - Case - C#

10-Mar-2014 14:45
Invitado (eze2k)
1 Respuestas

Buenas, soy ezequiel y aprendiendo a programar en C#.
He estado buscando algo de info sobre un menu de seleccion que no puedo terminar de armar.
Después de tanto buscar no me queda otra que preguntar porque ya le he dado vueltas y ahora me he liado aún más.
Podrían darme una mano por favor?
La idea es, tener un menu principal (menu1) en el cual tengo una opción que me lleva a un segundo menu (menu2) y teniendo la posibilidad desde este menu de volver al menu1.
A continuación adjunto el código.

 
using System;
using System.Diagnostics;
 
namespace TestLog
{
	class Program
	{
 
		static void Main()
		{
			Menu();
		}
 
		static void Menu()
		{
 
			char opcion;
 
			do
			{
				Console.Clear();
				Console.WriteLine("\t************************");
				Console.WriteLine("\t*  1- OPCION1	               *");
				Console.WriteLine("\t*  2- OPCION2   		       *");
				Console.WriteLine("\t*  ..- OPCION..		       *");
				Console.WriteLine("\t*  ..- OPCION..		       *");
				Console.WriteLine("\t*  N - Configurar Parametr   *");
				Console.WriteLine("\t************************");
				Console.WriteLine("\t*  [0]- Salir                            *");
				Console.WriteLine("\t************************");
				Console.Write("Opcion: ");
				do {
					opcion = Console.ReadKey(true).KeyChar;
				} while(opcion <'0' || opcion > 'N');
				Console.WriteLine(opcion + "\n");
 
				switch (opcion)
				{
					case '1':
						Process.Start("cmd.exe", "dir");
						break;
 
					case '2':
						Process.Start("cmd.exe", "dir");
						break;
 
					case '3':
						funcionM();
						break;
				}
 
 
			}while (opcion!='0');
		}
		static void funcionM()
		{
			char opcion2;
			do
			{
				Console.Clear();
				Console.WriteLine("\t************************");
				Console.WriteLine("\t*         Configuracion Param  *");
				Console.WriteLine("\t************************");
				Console.WriteLine("\t* [1]- Opcion1                       *");
				Console.WriteLine("\t* [2]- OPCION2                     *");
				Console.WriteLine("\t* [3]- OPCION3                     *");
				Console.WriteLine("\t* [..]- OPCION..                     *");
				Console.WriteLine("\t* [..]- OPCION..                     *");
				Console.WriteLine("\t* [10]- Volver al menu prin    *");
				Console.WriteLine("\t* [N]- OPCIONN                     *");
				Console.WriteLine("\t************************");
				Console.Write("Opcion: ");
 
				do {
					opcionOp = Console.ReadKey(true).KeyChar;
				} while( (opcion2 <'0') || (opcion2 > '10')); //ESTO se que está mal, pero no sé cómo hacer para que me tome los valores de 2 cifras.
				Console.WriteLine(opcion2 + "\n");
				switch(opcion2)
				{
					case '1': //Aqui me da problemas con el Case, me dice que 1 ya fue usado antes ... :S
						Process.Start("cmd.exe", "dir");
						break;
 
					case '2':
						Process.Start("cmd.exe", "dir");
						break;
 
					case '12':
						Menu();
						break;
				}
			}while(!='10');
			//}
		}
		/*static void Salir()
		{
			Console.Clear();
			Console.WriteLine("Salir");
		}*/
 
	}
}
 



Espero que puedan ayudarme.
Gracias.
Salu2.


12-Mar-2014 00:35
Nacho Cabanes (+32)

No termino de entender el problema... si desde el menú 1 llamas al menú 2, automáticamente se volverá del 2 al 1 en cuanto termine la correspondiente función, así que no necesitas esa "opción 10" tal y como la tienes: esa opción, en vez de llamar a "Menu" debería ser un "return" para volver a él (o un booleano que haga que el do-while deje de repetirse).

Por otra parte, no puedes leer datos de 2 letras con ReadKey. Deberás usar ReadLine (que es lo más razonable si hay opciones de 1 letra y opciones de 2) o ir acumulando en una cadena de texto cada dato que leas (que no tiene mucho sentido si de todas formas vas a tener que esperar que se pulse Intro, porque usas opciones de 1 letra y opciones de 2). Si quieres usar ReadKey, porque consideras más amigable que no sea necesario pulsar Intro, deberás usar siempre opciones de un carácter de longitud, ya sea porque haya menos de 10 opciones, o porque uses siempre letras en vez de números, o porque combines letras y números.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)