1

KeyPress イベントを介して入力を処理するフォームを持つ VB6 アプリケーションがあります。そのメソッドでは、一連の 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 個のキーがあります。OS は Windows 7 です。私が抱えている問題は、これらのキーの 1 つを約 10 秒間押し続けると、アプリが単にクラッシュすることです。例外ではなく、実行が停止するだけです。いくつかのミニダンプを収集しましたが、有用な情報を提供するものは何も見当たりませんが、それらを読む経験はありません。

アプリが一連のキー押下を処理できないように見える理由と、それを回避する方法を知る必要があります。

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 自体の中で Static 変数を使用します。処理が終了したときにのみ False に戻ります。Keypress 機能を有効にする必要があるかどうかを他の何かで制御できると思われる場合は、モジュール レベルでプライベート変数を使用します。

基本的に、何かを処理している間はキーの押下を聞くのをやめたいと思っています。


編集:コメントのいくつかの提案に合わせて、プログラムの流れを明確にするために、これをクリーンアップしました。

于 2013-03-06T16:54:29.900 に答える