我有一个VB6应用程序,其表单通过其KeyPress事件处理输入。在该方法中,它检查通过一系列if语句传递了什么ASCII代码,并运行必要的代码来响应输入。所以,基本格式是:
Private Sub Form_Keypress (KeyAscii As Integer)
If KeyAscii = 97
' Do some stuff
If KeyAscii = 98
' Do some different stuff
End Sub
有24个键连接到键盘编码器,可以从自助服务终端前面的按钮提供输入。操作系统是Windows 7.我遇到的问题是如果我将这些键中的一个按下大约十秒钟,应用程序就会崩溃 - 没有异常,只是停止执行。我确实收集了一些小型转储,我没有看到任何可以提供任何有用信息的内容,但我没有阅读它们的经验。
我需要知道为什么应用程序似乎无法处理按键流以及如何绕过它。
答案 0 :(得分:5)
我重新编码看起来更像是这样:
Private Sub Form_Keypress (KeyAscii As Integer)
Static bInKeyPress As Boolean
If bInKeyPress = True Then Exit Sub
On Error GoTo Handler
bInKeyPress = True
If KeyAscii = 97
' Do some stuff
ElseIf KeyAscii = 98
' Do some different stuff
' Everything goes through here, after execution is complete.
' Handler also calls through to this, to make sure we clean up things
ExitPoint:
bInKeyPress = False
Exit Sub
'Do any error handling / logging you want, here, then clean things up.
Handler:
GoTo ExitPoint
End Sub
如果您不希望其他任何东西能够重置变量,请在Sub内部使用静态变量,并且只有在处理完成时才会切换回False。如果您认为其他内容应该能够控制是否需要启用Keypress功能,请在模块级别使用私有变量。
基本上,你想在处理任何事情时停止听按键操作。
编辑:清除此内容以符合评论中的一些建议,并澄清程序流程。