首页 / 软件开发 / .NET编程技术 / 在Visual Studio 2010中接受键盘输入的技巧
在Visual Studio 2010中接受键盘输入的技巧2011-08-29 IT专家网 susan一个成功的应用系统,总是离不开键盘的输入。也就是说,应用软件需要通过 键盘等工具,来与用户进行交互。虽然这是一项基础性的工作,但是其中还是包 含了很多技巧。在VisualStudio2010中,总的来说,还是通过处理键盘事件来接 受来自键盘的信息。笔者这里就以Windows窗体为例,谈谈在接受键盘输入时的一 些技巧。一、Keydown事件。Keydown事件是用户敲击键盘时触发的一个事件。这是一个初始触发事件,即 当用户一按键盘时就触发了这个事件。掌握好这个事件的相关内容,是开发人员 处理键盘输入的基础。笔者认为,可以从如下几个方面来进行了解。一是掌握KeyEventArgs参数。简单的说,这个参数指定一个物理键盘按钮。不 过随着硬件的升级,其功能已经远远不止这么一个了。如现在键盘上都有组合键 的功能。如现在需要在英文小写状态下输入一个大写的字符,则需要使用Shift与 任意一个字符的组合键。再如需要输入数字键上面的特殊符合,也需要采用Shift 组合键等等。应用软件需要判断用户是否使用了组合键,此时就需要借助这个参 数。也就是说,在VisualStudio2010中编写代码时,可能需要使用一个IF语句或 者其它类似的语法来判断用户是否采用了组合键。二是了解Modiiers属性的含义。注意,在这里不能够顾名思义。其实这个属性 会跟上面这个参数结合使用。刚才我们讲过,用户可能在输入时会使用组合键。 现在的一个问题时,我们常用的组合键有三个,分别为Shift、Ctrl和Alt。不同 的组合键与其它键结合,往往起到不同的效果。为此应用程序不仅要知道,用户 是否同时按下了多个键,还需要了解,用户按下的是哪个组合键。这个属性就是 用来记录用户按下的是以上三个键中的哪一个。在编写代码的时候,可能需要使 用Case语句来根据用户的行为在选择不同的操作。三是DeyDate属性。在Windows操作系统中,可以同时按下Shift、Ctrl和Alt三 个键。此时系统会跳出任务管理器。在应用程序开发过程中,用户可能也需要同 时按下这三个键来完成特定的任务。此时需要使用的属性就是Keydata属性。通常 情况下,开发人员可以使用来自Keys 的常数从Keydata属性中提取信息。同时使 用And运算符(表示同时按下三个键)将由Keydata返回的数据与Keys中常数进行比 较,从而获得有关用户按下键的信息。了解了这几个参数与属性之后,基本上就掌握了Keydown事件。笔者再次强调 一下,Keydows事件是应用程序接受键盘输入的一个必须要经过的环节。开发人员 必须要掌握。二、KeyPress事件。这个事件也是在用户按下键盘时触发的。不过其触发的顺序比较晚。也就是说 ,在Keydown事件被成功触发之后,才会触发这个事件。两者之间有先后的顺序。 这是掌握这个事件时需要知道的第一个内容。另外,这个Keypress事件也并不是对所有的键都敏感。一般来说,当用户按的 键会产生字符时才会触发这个时间。即当用户按的是键盘上的数字键时不会触发 这个事件。而上面提到的第一个事件,则是在任何情况下,只要用户按下了键盘 的按钮,就会触发的。不过需要注意的是,有时候当用户按下任意键时,也会触 发这个Keypress事件。这就是这两个事件的第二个区别。在这个事件中,主要使用了一个KeyPressEventArgs参数。简单的说,这个参 数主要用来代表所按键的字符代码。因为字符代码对于字符键和组合键的每个组 合都是唯一的,为此这个参数的值也是唯一的。例如同样是键盘上的字符A键,在 不同的情况下会产生不同的字符代码。如在大写控制键打开与关闭的情况下,当 用户按下这个字符A键时,其后台产生的字符代码是不同的。在编写代码的时候, 开发人员不用了解到底用户是在什么情况下按下某个按钮的。只需要知道,不同 的字符代码代表什么意思。如字符代码65就表示用户同时按下了Shift键与A键。 此时在代码中,就需要根据键盘当前的状况来决定后续的行为。如键盘当前处于 大写状态下,则表示用户想输入的信息是小写字符a。反之,则表示用户想输入的 信息为大写字符A。最后需要注意的一点是,开发人员在必要的时候,可以取消这个事件。也就是 说,即使用户按下了键盘上的按钮,也不触发这个事件。在某些情况下,这个功 能还是蛮有用的。如当某帐单据已经审核,不允许再进行任何的更改。或者说, 只允许用户通过鼠标来操作,而不允许通过键盘来操作。简单的说,就是需要系 统忽略用户的键盘输入,此时就需要使用这种方法。其实实现的手段也很简单, 只需要使用Handled属性即可。当将这个属性设置为True时,就会取消 Keypress 事件。