Code Bye

C#控制台程序的两个小问题

 

C#控制台程序的两个小问题
(1) 如何制作一个菜单
(2) 如何从子程序返回菜单

菜单控件啊。。。。。。。。。。。。。。。。。。。。。
菜单可以这样写
for (; ; )
{
    Console.Write("请选择:0.最新报告 1.最近报告 2.全部报告 3.Paper 4.计划 ESC.结束....");
    ConsoleKeyInfo k;
    k = Console.ReadKey(true);
    Console.WriteLine();
    if (k.KeyChar == 27)
        return;

    switch (k.KeyChar)
    {
        case (char)27:
            return;
        case ""0"":
            Console.WriteLine("选择了0");
            break;
        case ""1"":
            Method1();
            break;
    }
}

当从 Method1方法出来之后,会自动回到主菜单。

20分
如果需要清除屏幕,你可以在主菜单之前写一句
Console.Clear();

通常还会用一些图形符号在菜单周围画出一些图形边框,制作好看一点的成块的文字显示。

你可以看看Console类,由于字符交互界面非常简单,所以基本上主要功能全都在那里了。例如可以通过 Console.ForegroundColor 获取和设置背景色,类似地还可以指定屏幕的的行列位置来显示(例如你需要显示一个跳动的百分率就需要在同一个位置、固定宽度的字符串不断刷新),等等类似的操作。

我不知道网上还能不能下载到 visual basic for dos 1.0 了。这是微软在1993年(记得好像是)以前开发的,可以看出“控制台程序时代的终结版本”是个什么样子的。支持全屏字符处理,包括鼠标支持,以及你所关心的菜单。

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

namespace ConsoleApplication2
{
    class Program
    {
        static int x = 0;

        static string[] menuitems = { "hello", "world", "exit" };
        static void Main(string[] args)
        {
            drawmenu();
            while (true)
            {
                var ki = Console.ReadKey();
                if (ki.Key == ConsoleKey.UpArrow)
                {
                    x--;
                    if (x < 0) x = menuitems.Count() - 1;
                }
                if (ki.Key == ConsoleKey.DownArrow)
                {
                    x++;
                    if (x > menuitems.Count() - 1) x = 0;
                }
                drawmenu();
            }
        }
        private static void drawmenu()
        {
            Console.Clear();
            for (int i = 0; i < menuitems.Count(); i++)
            {
                if (i == x)
                {
                    Console.BackgroundColor = ConsoleColor.Gray;
                    Console.ForegroundColor = ConsoleColor.Black;
                }
                Console.WriteLine(menuitems[i]);
                Console.ResetColor();
            }
        }
    }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#控制台程序的两个小问题