処理の途中で強制終了

解決


ちゃまき  2012-08-16 20:17:17  No: 147743  IP: [192.*.*.*]

For 〜NEXT などのループ処理の途中で、とあるキーを押すとExit For するようにしたいのですが、処理途中で特定のキーが押されたことを判断するにはどうすればよいのでしょうか?

編集 削除
Koz  2012-08-17 00:13:47  No: 147744  IP: [192.*.*.*]

GetAsyncKeyState API を使う方法があります。

Private Declare Function GetAsyncKeyState _
    Lib "user32" (ByVal vKey As Integer) As Short

Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    Const VK_A As Integer = 65
    Do
        If GetAsyncKeyState(VK_A) <> 0 Then Exit Do
    Loop
    MessageBox.Show("Aキーが押されました。")
End Sub

編集 削除
ちゃまき  2012-08-17 08:03:29  No: 147745  IP: [192.*.*.*]

Kozさんありがとうございました。

無事解決しました。キーによって固有の番号があり、それを変更することで、いろいろなキーに対応できるのですね。
使ってみます。

編集 削除
shu  2012-08-18 13:11:15  No: 147746  IP: [192.*.*.*]

解決したようですが、
時間が掛かると思われる処理内でキーボード状態を
取得するのではなく
時間が掛かる処理を別スレッド化したりタイマーにより
処理の占有時間を減らすなどして
KeyPress、KeyDownイベントなどによりキー押下を判断したほうが
良いと思います。

編集 削除