Welcome

首页 / 软件开发 / .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 事件。