1

我有一个 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。我遇到的问题是,如果我按住其中一个键大约十秒钟,应用程序就会崩溃——没有例外,只是停止执行。我确实收集了一些小型转储,我没有看到任何可以给我任何有用信息的东西,但我没有阅读它们的经验。

我需要知道为什么该应用程序似乎无法处理按键流以及如何绕过它。

4

1 回答 1

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 功能,请在模块级别使用 Private 变量。

基本上,您希望在处理任何内容时停止听按键。


编辑清理它以与评论中的一些建议保持一致,并澄清程序流程。

于 2013-03-06T16:54:29.900 回答