2011-02-08 17 views
0

どのようにキーストロークを受け入れますか?たとえば、ユーザーがqを押すと、アプリケーションを終了します。WinFormsアプリケーションでキーストロークを受け入れる方法はありますか?

これを行うにはどうすればよいですか?私はWinFormsを使用しています。

+5

WinForms、WPF、ASP.NET、....? –

+0

可能な複製[winformsでキーボードショートカットを実装する最も良い方法は?](http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-winforms) –

答えて

2

WinFormsを使用している場合は、KeyDownまたはKeyUpイベントを使用してください。

あなたが作っているアプリケーションのどのような
protected override void OnKeyUp(KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Q) 
    { 
     this.Close(); 
    } 

    base.OnKeyUp(e); 
} 
+0

私は必然的にイベントを扱う?私がするつもりなのは、ユーザーが特定のキーを押したときに終了することだけです。 – olive

+1

@user:はい、イベントに対処する必要があります。 * WinFormsで行うすべてのことはイベントを処理します。 Windowsはイベント駆動型の環境です。なぜ最初にイベントを避けたいのか分かりませんが、これを行うためのコードは複雑ではありません。 –

+0

どのように素敵な「Q」キーを手に入れましたか? –

1

:ユーザーがキーQを押すたび

例えば、ちょうどOnKeyUpイベントとクローズをオーバーライドするフォームクラスに次のコードをドロップしますか? ウィンドウフォーム? WPF?コンソール? 最初の2つにはキーの押下に関連するイベントがあり、3番目のものではConsole.ReadまたはReadLineメソッドを使用して戻り値をテストできます。

+0

Windowsフォームで作業しています。 – olive

0

ここでは、どのコントロールを使用しているのかによってKeyPreviewとOnKeyPreviewを使用できますあなたはフォーム上で使用していますか? KeyDownとKeyUpは、自分で処理する前に処理されることがあります。

あなたの入力を受け入れるフォームにテキストボックスがある可能性があり、誰かが「ケベック」と書いているとアプリケーションが終了する可能性があるので、終了する修飾子を使用せずに「q」キーを使用すると、 'を入力します。

イベントを使用しない場合は、同じ仮想メソッドをオーバーライドし、必要な処理を実行するための実装を提供します。しかしここでも、ここで好まれる方法はイベントです。

+0

これを行うための好ましい方法は、適切なメソッドをオーバーライドするのではなく、イベントを処理することです。コントロールは本当に自分のイベントを処理するべきではありません。これはオブジェクト指向設計のルールのほとんどに違反し、後で誰かがそのコントロールのサブクラス化を決めると、あらゆる種類の混乱や予期しない動作を引き起こす可能性があります。 –

+0

私は、コントロールではなくフォームについて話していました。なぜなら、問題は(おそらく)閉じられるフォームの作成に関するものであるからです。 –

関連する問題