キャンセルでアンロードするには

解決


とく  2010-06-06 11:01:07  No: 102418  IP: [192.*.*.*]

エスケープでフォームをアンロードできる様にしたいのですが、ネットで調べて、
Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyEscape Then      'ESCキー
        Unload Me
    End If
End Sub

VB6にて、こう記述するとあったのですが、同じ様に記述しても一向に
反応しません。どの様にしたらよいでしょうか
(また、プロパティーのトゥルー、フォールスで設定出来た記憶があったの
ですが、これは思い違いでしょうか)

よろしくお願いします。

編集 削除
K.J.K.  2010-06-06 11:19:48  No: 102419  IP: [192.*.*.*]

Cancel プロパティを True にした CommandButton を置いて、
その Click イベントで Unload するとか。

KeyPress イベントは、文字入力として扱いたい場合のために
あるのであって、Keyboard のボタンが押されたことに反応したいの
あれば KeyDown,KeyUp イベントを使うべきでしょう。

また、フォーカスを持ち得るコントロールがある場合は、KeyPreview
プロパティを True にして置かないと Form の KeyPress イベントは
発生しないでしょうし。

編集 削除
とく  2010-06-06 19:03:06  No: 102420  IP: [192.*.*.*]

ご回答有難う御座います。
KeyPreviewプロパティを True にして、キープレスイベントに記述した所、上手く出来たのですが、キーダウンイベントに記述した所反応しません。
何処がおかしいでしょうか
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyAscii = vbKeyEscape Then
        Unload Me
    End If
End Sub
よろしくお願いします。

編集 削除
K.J.K.  2010-06-06 20:20:02  No: 102421  IP: [192.*.*.*]

> If KeyAscii = vbKeyEscape Then
If KeyCode = vbKeyEscape Then
でなく?

もっとも、Form 上にフォーカスを持ち得る他のコントロールを配置する
状況ならば、最初に提示した方法である Cancel プロパティを True にして、
状況に応じては  TabStop プロパティを False にした CommandButton を
使う方が面倒は少ないと思いますよ。

編集 削除
とく  2010-06-07 10:56:27  No: 102422  IP: [192.*.*.*]

K.J.K.様有難う御座いました。
If KeyCode = vbKeyEscape Then
でなく?
すいません直していませんでした。

今は、コマンドボタンの方でやろうと思っています。

編集 削除