我要启动一个控制台应用程序。问题是如何确定CTRL键被单独按下而没有任何其他键。
using System;
using System.Text;
public class ConsoleKeyExample
{
public static void Main()
{
ConsoleKeyInfo input;
do
{
input = Console.ReadKey(true);
StringBuilder output = new StringBuilder(String.Format("You pressed {0}",input.Key.ToString()));
Console.WriteLine(output.ToString());
if ((input.Modifiers & ConsoleModifiers.Control) != 0)
{
Console.WriteLine("CTRL Pressed");
}
} while (input.Key != ConsoleKey.Escape);
}
}
我想监视 CTRL 键的行为。
跟踪此代码后,我在 readkey 行上放置了一个检查点,但是当我按 CTRL 时,没有任何反应,但是当我按任何其他键(如“K”)时,它开始从键盘读取键。
除非你使用的是 4.0 版本之前的 .Net 框架,否则我相信使用枚举HasFlag()比使用按位 AND 更具可读性。
e.g.
if (cki.Modifiers.HasFlag(ConsoleModifiers.Control))
{
Console.Write("CTRL ");
}
我不确定为什么 MSDN 文章没有更新为使用标志,因为 ConsoleModifiers 确实支持 Flags 属性。
以下是适用于框架 4.0 及更高版本的同一程序的更新副本。
static void Main(string[] args)
{
ConsoleKeyInfo cki;
Console.WriteLine("Press Esc to exit the loop");
do
{
cki = Console.ReadKey(true);
if (cki.Modifiers.HasFlag(ConsoleModifiers.Control))
{
Console.Write("CTRL ");
}
if (cki.Modifiers.HasFlag(ConsoleModifiers.Alt))
{
Console.Write("ALT ");
}
if (cki.Modifiers.HasFlag(ConsoleModifiers.Shift))
{
Console.Write("SHIFT ");
}
Console.WriteLine(cki.Key.ToString());
} while (cki.Key != ConsoleKey.Escape);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)