2013-03-17 100 views
3

我想在C#一個簡單的菜單,如: 這樣的事情應該打印出控制檯:使在C#中簡單的控制檯菜單

FirstOption 
SecondOption 
Exit 

到目前爲止,這裏是我的代碼(有與命名問題和封裝,而這一切只是快速原型,花了約30分鐘):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Menu StartGame = new Menu("Start Game"); 
      Menu EndGame = new Menu("End Game"); 
      Console.WriteLine(StartGame); 
      Console.WriteLine(End Game); 
      EndGame.isChecked = false; 
     } 
    } 

    class Menu 
    { 
     private string Content; 
     public bool isChecked = true; 

     public Menu(string Content) 
     { 
      this.Content = Content; 
     } 
     public void CheckCondition() 
     { 
      if (isChecked) 
      { 
       Console.BackgroundColor = ConsoleColor.White; 
       Console.ForegroundColor = ConsoleColor.Black; 
      } 
      else 
      { 
       Console.ResetColor(); 
      } 
     } 
     public override string ToString() 
     { 
      this.CheckCondition(); 
      return this.Content; 
     } 
    } 
} 

的想法是,當點擊一個按鈕,菜單項被高亮顯示。當有人來到最後一個菜單項時,他不能再次按DownArrow,對於第一項和UpArrow也是如此。

我完全被卡住與此有關。

+0

http://img688.imageshack.us/img688/9655/menu2xa.png這樣的事情,但與其他顏色 – 2013-03-17 16:33:41

+0

寫作UI在詛咒真的很難,P – leppie 2013-03-17 16:41:30

+1

有你爲什麼不使用任何特殊的理由WinForms? – Shrikey 2013-03-17 16:56:57

回答

1

不,你不能只是這樣做,因爲Win32控制檯不支持這些方法。但是,您可以使用GDI在控制檯窗口上繪圖。

+0

什麼方法?據我所知,它支持他想要做的一切。不確定顏色的變化,但我認爲這也是可能的。 – 2013-03-17 16:45:40

2

我不能完全肯定..可能是這樣可以幫助你上手。

while (true) 
     { 
      var ch = Console.ReadKey(false).Key; 
      switch (ch) 
      { 
       case ConsoleKey.UpArrow: 
        HighlightStartGame(); 
        break; 

       case ConsoleKey.DownArrow: 
        HighlightEndGame(); 
        break; 
      } 
     } 
static void HighlightStartGame() 
    { 
     Console.Clear(); 
     Console.ResetColor(); 
     StartGame.isChecked = true; 
     Console.WriteLine(StartGame); 
     EndGame.isChecked = false; 
     Console.WriteLine(EndGame); 

    } 

    static void HighlightEndGame() 
    { 
     Console.Clear(); 
     Console.ResetColor(); 
     StartGame.isChecked = false; 
     Console.WriteLine(StartGame); 
     EndGame.isChecked = true; 
     Console.WriteLine(EndGame); 

    } 
1

的問題是,該控制檯無法處理任何鼠標事件。你想如何點擊菜單?你將不得不用鑰匙做所有事情。您可以使用的選項是定義擊鍵(例如Ctrl-F或「FirstEntry」的Alt-F)以激活菜單條目或使用箭頭鍵實現導航,從而允許您在字段(按鈕或菜單字段和文本字段)。這不是內置的,所以你將不得不在代碼中做所有事情。您將不得不使用控制檯的SetCursorPositionReadKey方法來實現此目的。我記得以前在VT100終端上做過這個。

0

我寫了一個console menu library for C#。它沒有鼠標支持,但它可能仍然是你的起點?

CMenu是一個輕量級,低規格的框架,用於在.Net中構建控制檯 菜單。除了手動提示用戶輸入並解析它之外,您可以用一種簡短的,結構化的和全面的方式定義命令,並讓CMenu處理其餘的部分。

CMenu的目的是爲低開銷 - 簡單的東西應該是簡單的 實現。如果你不使用一個功能,你不需要知道任何關於它的東西 。

與此同時,複雜的方案的支持。大菜單可以很容易地分成幾個類。背景自我配置。 您不必擔心所有涉及 較大菜單的煩人細節,它只會起作用。

最重要的是,它使用起來非常簡單快捷。命令可以簡化爲 ,智能解析器甚至可以實現部分匹配。幫助 命令已集成。