注册 登录
编程论坛 VB6论坛

答案为什么是A a?

dgg实在 发布于 2016-10-11 22:52, 1577 次点击
将窗体的KeyPreview属性设为True,然后编写如下程序:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Print Chr(KeyCode)
    End Sub
    Private Sub Form_KeyPress(KeyAscii As Integer)
        Print Chr(KeyAscii)
    End Sub

运行程序时,按下字母键a,则窗体上显示的是A a

keycode不是不区分大小写的吗?为什么不可以是aa?
5 回复
#2
xzlxzlxzl2016-10-12 09:24
keycode是键盘扫描码,和键盘上的键一一对应,asc码是字符编码,是对键盘扫描码结合转换键后转换得到的一种国际通用编码。
#3
dgg实在2016-10-12 14:58
回复 2楼 xzlxzlxzl
不明白
#4
xzlxzlxzl2016-10-12 15:32
那我就按我理解的给你普及下“键盘扫描码是怎样形成的?”:
一般键盘有103个键盘,键盘就是一个开关,一般情况下,一个开关有进线和出线两条线路连接,103个开关就需要103*2共206条线路连接,这是不是太多了?为了简化线路,人们使用矩阵电路,判断矩阵电路交叉点是否连接来识别连接的健,比如用一个11*11的矩阵,这样的矩阵有121个交叉点,最多可以安排121个键,只需要22条线路。为了判断到底是那个键被按下,设计了一个行列扫描电路,如果将a键安排在第6行第5列的位置,当a键被按下时,扫描电路会扫描到第6行第5列的电位变化,依此判断行6列5的开关接通,记做扫描码键65,为了方便扫描码到asc码的转换,就把扫描码65标识为英文字母a了。
大概就这么个原理吧,我也是瞎想的,应该差不离。
#5
初始元灵2016-10-12 16:18
回复 4楼 xzlxzlxzl
哈哈,键盘的原理。
#6
ZHRXJR2016-10-13 20:00
Form_KeyDown事件与Form_KeyPress事件是二个不同的事件,Form_KeyDown事件是在窗体获得焦点时按下一个键盘的键是发生的事件,Form_KeyPress事件是按下或松开一个ANSI键发生的事件。
在Form_KeyDown事件中有二个参数,一个是KeyCode,是键代码,注意:是键代码,另一个是Shift,是事件发生时响应Shift、Ctrl、Alt键状态的整数。
在Form_KeyPress事件只有一个参数,KeyAscii是返回标准的ANSI键代码,注意:是返回标准的ANSI键代码,是一个整数,是标准的ANSI键代码的整数。
因此二个事件的返回值是不一样的。不然你试试下面这个代码:
程序代码:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Label1.Caption = KeyCode
  Print Chr(KeyCode)
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
   Label2.Caption = KeyAscii
   Print Chr(KeyAscii)
End Sub

只有本站会员才能查看附件,请 登录

二个标签中显示的数字是不一样的,Label1.Caption 显示的是键代码,Label2.Caption 显示的是标准的ANSI键代码。
因此你调用Chr()函数返回的字母就不一样了。

[此贴子已经被作者于2016-10-13 20:06编辑过]

1