如何用VB实现按下键盘特定按键让label.caption 改变

2024-12-20 03:14:47
推荐回答(2个)
回答1:

倒霉孩子,是老师分的还是抽签抽的
暂时给你个部分实现的代码,如果你不嫌麻烦,自己再添加几个计时器控件和写点类似的代码也就完全实现了
先说一下,这个代码只针对你的问题,如果不是针对你的问题,最好使用API获得全局按键消息,单解决你的问题的话,这个代码就足够了

'在窗体上画一个标签,三个计时器,一个按钮,全部默认属性
Dim i%

'按键被按下的事件
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 65 Then Timer1.Enabled = True '如果按下A,计时器1开始工作
'这里在添加相应计时器控件后,写类似代码
End Sub

'放开按键的事件
Private Sub Command1_KeyUp(KeyCode As Integer, Shift As Integer)
Timer1.Enabled = False '停止相应计时器事件
Timer3.Enabled = False '停止相关计时器事件
'这里写类似代码
i = 0 '计时变量清零
End Sub

Private Sub Command1_LostFocus()
Command1.SetFocus '让按钮始终保持焦点,以便接收按键消息,最好使用api
End Sub

'初始化各控件属性
Private Sub Form_Load()
Label1.Caption = "0"
'这里在添加相应标签控件后,写类似代码
Timer1.Interval = 1000
Timer1.Enabled = False
Timer2.Interval = 500
Timer2.Enabled = False
Timer3.Interval = 100
Timer3.Enabled = False
'这里在添加相应和相关计时器控件后,写类似代码
End Sub

'相应计时器事件,在添加相应计时器控件后,写类似代码
Private Sub Timer1_Timer()
i = i + 1 '计时变量每隔一秒累加1,即增加一秒的变量
If i = 1 Then Timer2.Enabled = True '如果计时变量到了一秒计时器2开始工作
If i = 2 Then Timer2.Enabled = False: Timer3.Enabled = True '计时器变量到了两秒...
End Sub

'相关计时器事件,在添加相关计时器控件后,写类似代码
Private Sub Timer2_Timer()
Label1.Caption = Val(Label1.Caption) + 10 '每隔0.5秒标签1+10
End Sub

Private Sub Timer3_Timer()
Label1.Caption = Val(Label1.Caption) + 10 '每隔0.1秒标签1+10
End Sub

上面的代码只实现了按A,复制代码即可运行测试

回答2:

窗体放8个Label控件,测试通过:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If GetKeyState(vbKeyA) < 0 Then Label1.Caption = Val(Label1.Caption) + 10
If GetKeyState(vbKeyB) < 0 Then Label2.Caption = Val(Label2.Caption) + 10
If GetKeyState(vbKeyC) < 0 Then Label3.Caption = Val(Label3.Caption) + 10
If GetKeyState(vbKeyD) < 0 Then Label4.Caption = Val(Label4.Caption) + 10
If GetKeyState(vbKeyE) < 0 Then Label5.Caption = Val(Label5.Caption) + 10
If GetKeyState(vbKeyF) < 0 Then Label6.Caption = Val(Label6.Caption) + 10
If GetKeyState(vbKeyG) < 0 Then Label7.Caption = Val(Label7.Caption) + 10
If GetKeyState(vbKeyH) < 0 Then Label8.Caption = Val(Label8.Caption) + 10
End Sub

Private Sub Form_Load()
KeyPreview = True
End Sub