web-dev-qa-db-ja.com

エスケープキーが押されたときにVB.NETフォームを閉じる

VB 2010 Expressを使用しています。

C#フォームのCancelButtonプロパティを設定します。

このVBフォームにはCancelButtonがないので、KeyPressまたはKeyDownのいずれかをプログラムする必要があると思います。

  1. これら2つのイベントの違いは何ですか?
  2. どちらを使用すればよいですか?
  3. これの一般的なコードは次のとおりだと思いますか?:

    If e.KeyCode = Keys.Escape Then
        Close()
    End If
    

特定の.Focusフォームの他のコントロール内のコードの場合、メインフォームが実際にhasフォーカスになることはないため、これをメインフォームイベントプロシージャに配置しても意味がありません。

13
whytheq

フォームのキーダウンを

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.Escape Then Me.Close()
End Sub

次に、フォームのKeyPreviewプロパティをTRUEに設定することを忘れないでください。

32
patrick choi

私の解決策はフォームのプロパティにもあります:

  • cancelButtonプロパティを、キャンセル機能を実行するボタンに設定します。
1
My Brain
  1. 「VBフォームには[キャンセル]ボタンがありません」と言います-だから、見えないものを与えてください。a。)ボタンをフォームに追加します。 b。)VisibleプロパティをFalseに設定します。 (コンピューターは間違いを犯さないことを覚えておいてください-彼らは嘘をつきますですから、均等にしましょう。)
  2. フォームのプロパティメニューで、CancelButton Propertyをyour invisible cancel buttonに設定します。
  3. フォームのプロパティメニューで、KeyPreviewプロパティをTrueに設定します。
  4. 非表示のCancelButtonをダブルクリックして、Me.Dispose()を追加します
  5. これで、処理するMicro-Nastyの混乱が発生しました。構造化プログラミングの基本原則の1つは、「ルーチンからの出口は1つだけでなければならない」です。 2つの異なる場所で出口ルーチンを処理する必要はありません。そして、ユーザーは右上隅の「Esc」を使用して外に出ることができます。構造化プログラミングの一体。そう 。 。 。
  6. 赤いボタンの右上の黒い "X"はFormName_Deactivateを呼び出します-フォームの名前がFormSantaの場合、それはFormSanta_Deactivateです。簡単にするために、正しい方法を気にしないでください(ベルベットの汗屋のマイクロサーフ、私が泣いているのが聞こえますか?)右上の「X」ボタンと非表示の終了ボタンに同じコードを指定します。次にMe.Close()を追加します
1
Frank Lindahl

フォームの「KeyPreview」プロパティをtrueに設定する必要があります。そうしないと機能しません...

0
Kevin Henzel