|
Visual Studio 2010 接受键盘输入技巧
一个成功的应用系统,总是离不开键盘的输入。也就是说,应用软件需要通过键盘等工具,来与用户进行交互。虽然这是一项基础性的工作,但是其中还是包含了很多技巧。在Visual Studio2010中,总的来说,还是通过处理键盘事件来接受来自键盘的信息。在这里就以Windows窗体为例,谈谈在接受键盘输入时的一些技巧。
一、Keydown事件。
Keydown事件是用户敲击键盘时触发的一个事件。这是一个初始触发事件,即当用户一按键盘时就触发了这个事件。掌握好这个事件的相关内容,是开发人员处理键盘输入的基础。笔者认为,可以从如下几个方面来进行了解。
一是掌握KeyEventArgs参数。简单的说,这个参数指定一个物理键盘按钮。不过随着硬件的升级,其功能已经远远不止这么一个了。如现在键盘上都有组合键的功能。如现在需要在英文小写状态下输入一个大写的字符,则需要使用Shift与任意一个字符的组合键。再如需要输入数字键上面的特殊符合,也需要采用Shift组合键等等。应用软件需要判断用户是否使用了组合键,此时就需要借助这个参数。也就是说,在Visual Studio2010中编写代码时,可能需要使用一个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事件。
三、KeyUp事件。
以上两个事件都是用户按下键盘的按钮时触发的事件。注意上面这两个事件并不是同时触发的,而是有先后的顺序。KeyUp事件顾名思义,就是当用户放开输入的键的时候,所触发的一个事件。在这个事件中,也会需要用到KeyCode属性、Modifiers属性和KeyData属性。这几个属性跟上面谈到的几个属性类似,在这就不过多展开了。
四、接受键盘输入时的注意事项。
当应用程序接受键盘输入时,最重要的一点就是需要对用户输入的数据进行合规性审计。也就是说,并不是用户输入什么,应用程序就接受什么。当用户输入数据时,需要对其合法性进行检查。如现在需要用户通过键盘输入一个身份证号码。一般来说身份证号码都会有最大长度的规定。当用户输入的数据超过这个长度时,系统就需要提醒。如可以发出嘟嘟的警报声,并忽略用户后续的输入。
总结了一下,类似的合规性审计主要有以下几种。
首先需要检查的是用户输入的数据有没有超过最大的长度限制。有时候我们可能会不小心按下了某个键,如书本压在键盘上,此时就会输入一长串字符。为了安全起见,就需要对输入的长度进行限制。当超过规定的长度是,需要发出警告。可以以声音、对话框等形式来提醒用户的键盘输入。
其次需要检查的是用户输入的内容。如在某些文本框中,只允许用户输入数字。如邮编、价格等等。在这些文本框中,当用户输入了非数字的数据,如大写字符A,系统会自动忽略掉,并向用户发出警报。一些设计的比较成熟的应用软件,在数字框内根本输入进非数字类型的数据。而有一些比较小的应用软件,则是在保存的时候进行检验。即用户可以输入,但是保存不了。笔者认为,事前控制比事后控制更加的有效。特别是在填写比较复杂的表单的时候。
第三是一些综合性的控制。如现在有一个文本框需要用户输入产品编码,其编码规则是前面三个位字符,后面五位为数字。为了提高数据的准确性,就需要在接受用户输入的时候对其进行验证。如当用户输入第四位内容的时候,如果用户输入的是字符,则会被忽略掉,并向用户发出警告。
总之,在接受用户键盘输入的时候,需要注意两方面的内容。一是在适当的时候接受用户的键盘输入。也就是说需要判断,在哪些情况下忽略用户的键盘输入操作。二是对于用户输入的数据,需要进行合规性审计。虽然在数据库层面也可以进行检验,不过笔者建议,最好还是在用户输入的时候就进行判断。事前控制的效果要好于事后。
欢迎访问微软官网下载相关软件http://www.microsoft.com/zh/cn/default.aspx
出处:蓝色理想
责任编辑:bluehearts
◎进入论坛网络编程版块参加讨论
|