vb怎样表示“长按”某个键,如ESC退出键? 20

长按就是按的时间比一般按键时间稍微长些。... 长按就是按的时间比一般按键时间稍微长些。 展开
 我来答
归萱pN
2012-03-10 · TA获得超过990个赞
知道大有可为答主
回答量:1068
采纳率:0%
帮助的人:1496万
展开全部
'窗体获得焦点才有效,如果无焦点可以使用api函数,自己修改
Option Explicit
Const settime = 1 '这里设置延迟1s
Dim keyup As Boolean, keydown As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 And Not keydown Then
keyup = False
keydown = True
delaymessage
End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
keyup = True
keydown = False
End If
End Sub

Function delaymessage()
Dim t, flag As Boolean
t = Timer
Do
If keyup Then Exit Do '未到时间放掉Esc键
If Timer - t >= settime Then
flag = True
Exit Do
End If
DoEvents
Loop
If flag Then
Print "时间已到:" & settime '可以用msgbox,但由于长安esc后msgbox显示后马上又消失,这里只是一个功能,给你用print做显示
flag = False
End If
End Function
更多追问追答
追问
请写出无焦点情况下(程序隐藏或最小化运行)的代码。
追答
无米无诚信,哈哈哈,连5毛都没有你还好意思问呀,我这个回答都不止5毛
zzqwz
2012-03-09 · TA获得超过481个赞
知道小有建树答主
回答量:870
采纳率:0%
帮助的人:560万
展开全部
Private a As Long
Private b As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
If Not b Then
a = Timer
End If
b = True
End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
If Timer - a > 1 Then MsgBox "long"
b = False
End If
End Sub

Private Sub Form_Load()
b = False
End Sub
更多追问追答
追问
1、测试你的代码了,大体实现了。但遗憾的是:MsgBox "long"是在KeyUp事件中。就是鼠标按ESC下去后重新起来的时候再执行的。能不能长按下去不起来,就执行MsgBox "long"?
2、你的代码中有个Timer,为什么不加时间控件就可执行?请解释下。谢谢
追答
你把判断放到keydown里就可以了
Private a As Long
Private b As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
If Not b Then
a = Timer
b = True
End If

If b And Timer - a > 1 Then
MsgBox "long"
b = False
End If
End If
End Sub

timer是得到开机时间 和时间控件无关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式