现在的位置: 首页 > 综合 > 正文

.NET(C#):System.Console控制台和按键操作

2012年01月24日 ⁄ 综合 ⁄ 共 1458字 ⁄ 字号 评论关闭

通过编写一个控制台下输出用户按键的简单小程序,用来练习控制台下(System.Console类)的一些跟输入按键相关的操作。

 

获取控制台按键信息

获取控制台下按键信息并可以制定按键字符是否被输出的函数是Console,ReadKey,它返回一个ConsoleKeyInfo。

class Console

    static ConsoleKeyInfo ReadKey(bool 是否不显示按键);

 

ConsoleKeyInfo类包含按键的详细信息:

class ConsoleKeyInfo

    Key: ConsoleKey;

    //返回ConsoleKey枚举,包含具体按键,比如Escape(Esc), A-Z, D1(数字1), F1...

   

    Modifiers: ConsoleModifiers;

    //返回ConsoleModifiers枚举,代表组合按键中的修饰按键:Ctrl, Alt 和 Shift,如果没有组合键的话为0

 

    KeyChar: char;

    //代表按键可以显示的文字值,也是Console.ReadKey可以设置的是否显示的文字值

 

 

另外还有其他特殊按键的信息比如大小写和小键盘按键。可以通过Console.CapsLock和Console.NumberLock属性来判断。

Console类还提供KeyAvailable属性,配合Console.ReadKey方法来显示是否有按键输入。

 

 

控制台Ctrl + C和取消事件

控制台运行用户按Ctrl + C来终止当前控制台运行,在下面的例子中,我们只用Esc键来终止用户输入,因此我们需要禁止Ctrl + C按键来终止控制台输入。

 

第一种方法是直接用Console类的TreatControlCAsInput属性,设置为true,这样Ctrl + C就是普通的按键输入,而不会终止控制台。

 

另一种方法是用Console类的CancelKeyPress事件:

Console类的CancelKeyPress事件会发生在控制台取消按键Ctrl + C被按后,在ConsoleCancelEventArgs中有Cancel属性来指定是否取消结束控制台的操作。设置为true后那么Ctrl + C就不会再结束控制台了

Console.CancelKeyPress += (sender, e) =>

{

    e.Cancel = true;

    //Ctrl + C关闭企图被取消,

};

 

 

示例小程序

 

image

 

代码:

public static void Main()

{

    //禁止Ctrl + C终止控制台

    Console.TreatControlCAsInput = true;

 

    while (true)

    {

        //获取ConsoleKeyInfo并不显示输入按键字符

        ConsoleKeyInfo key = Console.ReadKey(true);

 

        //Esc退出

        if (key.Key == ConsoleKey.Escape)

            break;

 

        //输出按键信息

        AddKey(key.Key, key.Modifiers);

    }

}

 

static void AddKey(ConsoleKey key, ConsoleModifiers mod)

{

    if ((int)mod != 0)

        Console.Write(mod.ToString() + " + ");

    Console.WriteLine(key);

}

抱歉!评论已关闭.