[英]Making a basic console c# application with a menu based on the key that is pressed
[英]Making simple console menu in 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
。
我完全坚持这个。
我不完全确定..可能这可以帮助你开始。
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);
}
不,你不能这样做,因为Win32控制台不支持这些方法。 但是,您可以使用GDI在控制台窗口上绘图。
问题是控制台无法处理任何鼠标事件。 你想如何点击菜单? 你必须用钥匙做所有事情。 您可以选择定义击键(如Ctrl-F或Alt-F表示“FirstEntry”)以激活菜单项,或使用箭头键实现导航,允许您在字段(按钮或菜单字段)中移动和文本字段)。 这不是内置的,因此您必须在代码中执行所有操作。 您必须使用控制台的SetCursorPosition
和ReadKey
方法才能实现此目的。 我记得曾经在VT100终端上做过这个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.