2009-05-15 20 views
19

最近、ソフトウェアを使用しているときに、ESCキーを使用すると、変更を保存せずにダイアログが閉じられることがあります。特に、ダイアログにキャンセルボタンが表示されていても、キャンセルボタンにマウスやタブを移動する必要はありません。 「おっと、それをするつもりはありませんでした」と言ってもいいクリーンな方法です。ソフトウェアに転送します。実際には、私はこの機能を実装していないソフトウェアに迷惑をかけることがわかりました。私はそれがWinformsのフードの下でまだ行われていないとは信じられません - 私には直感的です...どのようにWinformsのダイアログを閉じるためにESCキーを取得しますか?

私は見てきましたForm KeyPressイベントに入れたり、 "Cancel" DialogResultなどをシミュレートしようとしています。

したがって、問題は次のとおりです。バインドについて最もクリーンな方法変更を保存せずにダイアログを閉じるためのESCキー?

これまでの経験をお持ちの方のお役に立てれば幸いです。

答えて

27

フォームのCancelButtonプロパティを[キャンセル]ボタンを参照するように設定します。

this.CancelButton = this.cancelButton; 

Visual Studioでフォームのプロパティを経由してこれを設定することができ、コードがForm.Designerに追加されます。

+7

Enterキーに対応する "AcceptButton"もあります。この回答方法の利点は、キーの押下よりも入力とエスケープの方が多くなることです。このメソッドを使用すると、ボタンに正しいビジュアルヒントがレンダリングされます(たとえば、AcceptButtonが太い境界線を取得するなど)。 – stusmith

+5

キャンセルボタンとOKボタンのDialogResultプロパティも設定することを忘れないでください。 – NascarEd

6

また、キャンセルボタンにフォームのCancelButtonプロパティを設定することができます。 csファイル

1

あなたの開発環境によっては.NETに組み込まれている(vb.oldのように)、フォームには「キャンセルボタン」プロパティがあります」このプロパティが設定されている場合、ボタンユーザーが「ESC」キーを押すたびに「クリック」されます。

'Enter'キーに対応する「AcceptButton」プロパティがあります。

メモリからは、デフォルトで上記のロジックに従います。もちろん、メッセージボックスのデフォルトのボタンを指定することはできますが、ユーザーはそれが何であるかを積極的に主張することなく彼らはしたい。

1

あなたがこれを行うことができます:あなたはprocesscmdkeyを上書きすることができ、キャンセルボタンを持っていない時にこれを行うには

button b = new button(); 
b.click = button_click; 
this.cancelbutton = b; 


protected void button_click(object sender,eventargs e) 
{ 
    this.close(); 
} 
9

を:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Escape) 
    { 
    this.Close(); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

行 'this.Close();'の直前に 'DialogResult = DialogResult.Cancel; 'を挿入することができます。 –

0
If e.KeyCode = Keys.Escape Then 
     If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub 
     dashboard.Close() 

    ElseIf e.KeyCode = Keys.F5 Then 
     MessageBox.Show("F5") 
    End If 

このguys.Thisを試してみてはのためにありますFormを閉じる前にYesまたはNoの確認用のmessageBoxを表示します。このコードをKeydownという名前のフォームイベント内でフォームに追加できます。ここで「ダッシュボード」とは、閉鎖されるフォームの名前です。このコードは、はいまたはいいえボタンを使用してメッセージボックスを表示します。 「はい」を選択すると、フォームが閉じます。「いいえ」を選択すると、アクションは取り消されます。フォームは同じままです

+1

答えの説明を追加してください。 :) –

+0

うん、確かに..このコードをKeydownという名前のフォームイベント内でフォームに追加することができます。ここで「ダッシュボード」とは、閉鎖されるフォームの名前です。このコードは、はいまたはいいえボタンを使用してメッセージボックスを表示します。 「はい」を選択すると、フォームが閉じます。「いいえ」を選択すると、アクションは取り消されます。フォームは同じままです – Prakash

+0

上記のコードを試しましたか? – Prakash

関連する問題