Hola eze2k, el problema esta en que Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo en caso de que necesites mas de 10 opciones
1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
2. En lugar de usar Console.Readkey utiliza Console.Readln()
Te dejo el codigo corregido con comentarios.
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* 3- 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 > '3'); //N cualquier valor dependiendo del menu
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* [0]- Volver al menu prin *");
Console.WriteLine("\t************************");
Console.Write("Opcion: ");
do
{
/*
Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo
en caso de que necesites mas de 10 opciones
1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
2. En lugar de usar Console.Readkey utiliza Console.Readln(), Ejemplo:
string opcion2;
opcion2 = Console.ReadLine();
switch (opcion2)
{
// Utiliza "" en lugar de ''
case "10": Console.WriteLine("\t* [10]- Volver al menu prin *");
break;
}
*/
opcion2 = Console.ReadKey(true).KeyChar;
} while ((opcion2 < '0') || (opcion2 > '3')); //ESTO se que está mal, pero no sé
// cómo hacer para que me tome los valores de 2 cifras. El error que me devuelve es:
// Demasiados caracteres en literal de caracter - CS012
Console.WriteLine(opcion2 + "\n");
switch (opcion2)
{
case '1': //Aqui me da problemas con el Case, me dice que 1 ya fue usado antes ...
//:S El error que me devuelve es: Demasiados caracteres en literal de caracter - CS012
Process.Start("cmd.exe", "dir");
break;
case '2':
Process.Start("cmd.exe", "dir");
break;
case '3':
break;
}
} while (opcion2 != '0');
//}
}
/*static void Salir()
{
Console.Clear();
Console.WriteLine("Salir");
}*/
}
}
Saludos
