一个控制台应用程序中的简单菜单

13
我想让我的菜单重复显示,这样在选择并执行选项1后,它将返回到菜单并要求选择另一个选项。
class Program
{
    static void Main(string[] args)
    {

        FootballTeams MyCode = new FootballTeams();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.AddTeams();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.DisplayTeams();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.Delete();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.TeamSearch();
        Console.ReadLine();
    }
}

这里是已经去除内容的方法列表:

class FootballTeams
{


    public FootballTeams(){ }

    List<string> teams;
    public void ListInit()


    public void DisplayMenu()
   {   
    Console.WriteLine("Football Manager");
    Console.WriteLine();
    Console.WriteLine("1. Add a Football team");
    Console.WriteLine("2. List the Football teams");
    Console.WriteLine("3. Search for a Football team");
    Console.WriteLine("4. Delete a team");
    Console.ReadLine();
    }



    public void AddTeams()
    {
      Console.WriteLine("Enter a team to be added: ");
      string userinput = Console.ReadLine();
      if (teams.Count < 10)
      {
       if (userinput != "Colchester")
        {
          teams.Add(userinput);
          foreach (var item in teams)
          Console.Write(item.ToString() + " ");
         }
        else
          Console.Write("NOT ALLOWED");
         }
       else
         Console.Write("MAXIMUM LIMIT REACHED");
      }


    public void DisplayTeams()
    {
     foreach(var item in teams)
     Console.Write(item.ToString() + " ");
    }

    public void TeamSearch()
    {
     Console.WriteLine("Please enter the team you wish to search for: ");
     string userinput = Console.ReadLine();
     if (teams.Contains(userinput))
     Console.WriteLine("Success, team " + userinput);
    }

    public void Delete()
    {
      Console.WriteLine("Enter a team you wish to delete: ");
      string userinput = Console.ReadLine();
      teams.Remove(userinput);
      foreach (var item in teams)
      Console.Write(item.ToString() + " ");
    }

我知道我表达得不好,所以希望有人能理解我的问题:P

3个回答

23

你可以使用do-while循环来实现这个目的 对你的DispalyMenu()方法进行一点修改,并返回如下结果

static public int DisplayMenu()
{   
  Console.WriteLine("Football Manager");
  Console.WriteLine();
  Console.WriteLine("1. Add a Football team");
  Console.WriteLine("2. List the Football teams");
  Console.WriteLine("3. Search for a Football team");
  Console.WriteLine("4. Delete a team");
  Console.WriteLine("5. Exit");
  var result = Console.ReadLine();
  return Convert.ToInt32(result);
}

并将其编写在您的Main()方法中

int userInput = 0;
do
{
  userInput = DisplayMenu();
}while(userInput!=5);

因此,暂时用户不输入“5”,代码将在循环中执行。 希望这有所帮助。


1
很好的例子。一个小注释:int.TryParse(result,out item)可能更好,因为如果输入了非整数,它不会抛出异常。 - mark gamache

14

请查看 Console.ReadKey() 方法。

将您的主函数替换为:

static void Main(string[] args) {
    FootballTeams MyCode = new FootballTeams();

    MyCode.ListInit();

    ConsoleKeyInfo cki;

    do {
        MyCode.DisplayMenu();
        cki = Console.ReadKey(false); // show the key as you read it
        switch (cki.KeyChar.ToString()) {
            case "1":
                MyCode.AddTeams();
                break;
            case "2":
                MyCode.DisplayTeams();
                break;
            // etc..
        }
    } while (cki.Key != ConsoleKey.Escape);

}
基本上,您需要循环直到按下Escape键。 每次读取按键时,可以执行所选操作。

基本上,您需要循环直到按下Escape键。每次读取按键时,可以执行所选操作。


当我实际运行它时,所有的方法都不起作用,比如我按1添加一个团队,它不会初始化该方法,而是只打印菜单? - user2852418
ReadKey 中的布尔值是用于拦截按键而不是显示它。若要显示它,布尔值应为 false。 - tinstaafl
@tinstaafl,我把方法的内容拿出来以缩短帖子,我会把它们再加回去。 - user2852418
@user2852418:请看更新。case语句应该寻找D1D2而不是12。此外,您需要从.DisplayMenu()方法中删除ReadLine语句。我在本地测试过了,它可以正常工作。 - NotMe
@tinstaafl:没错。 - NotMe
显示剩余2条评论

11

现在有一个NuGet包可供使用

https://github.com/splttingatms/EasyConsole

示例

添加NuGet包后,菜单可以通过以下方式实现,这是一个非常基本的选项。

static void Main(string[] args)
{
    var menu = new EasyConsole.Menu()
      .Add("foo", () => Console.WriteLine("foo selected"))
      .Add("bar", () => Console.WriteLine("bar selected"));
    menu.Display();
}

在操作中,您可以放置任何方法以在选择时运行。

这将输出类似以下内容:

  1. foo
  2. bar

选择一个选项:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接