2012-01-04 5 views
1

私のフォームには、「スキャン」や「終了」などのボタンがいくつかあります。私は多くのプログラムで、キーが押されてボタンが使えるようになっているのを見てきました。多くの場合、ボタンのテキストには、固有のキーに下線が引かれています(これらのフォーラムでアンダーラインオプションを使用する方法はわかりません)。私は、フォームに行って、キープレスイベントを追加しました:方法を実行するにはキー押しを使用できますか?

private void Form1_KeyPress(object sender, KeyPressEventArgs key) 
    { 
     switch (key.ToString()) 
     { 
      case "s": 
       Run_Scan(); 
       break; 
      case "e": 
       Application.Exit(); 
       break; 
      default:      
       MessageBox.Show("I'll only accept 's' or 'e'."); 
       break; 
     } 
    } 

をしかし、その後「S」またはフォーム上の「E」を押すと、何もしません。ここでどこが間違っているのかわからない?

答えて

1

ProcessKeyCommandをオーバーライドすると、フォーム上のどこからでも入力が受け入れられます。ただし、修飾子を追加する必要があります。たとえば、テキストボックスで 's'または 'e'を押すと、アクションがトリガーされるためです。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 

    switch (keyData) 
    { 
     case Keys.S: 
      Run_Scan();     
      break; 
     case Keys.E: 
      Application.Exit(); 
      break; 
     default:      
      MessageBox.Show("I'll only accept 's' or 'e'.");     
      break; 

    }   

    return base.ProcessCmdKey(ref msg, keyData); 
} 
1

key.ToString()は、間違った呼び出し方法です。キーのプロパティ:key.KeyCharにアクセスしたいとします。

例を含むKeyPressEventArgsの詳細については、MSDN hereを参照してください。

2

あなたはAccess Keysと呼ばれるものを探していると思います。「&」というシンボルで定義されています。

KeyPressイベントハンドラを削除します。あなたはそれを必要としません。

ボタンのテキストを「&スキャン」と「&終了」に変更します。また

Here are some guidelines about using access keys in windows applications.

+0

ありがとうございました。 Visual Studioのフォームに下線付きの文字を表示させるようにしましたが、プログラムが実行されたときに実際には線が表示されませんでしたか? –

+0

オペレーティングシステムの機能を隠している可能性があります。 「Alt」キーを押したままにしてください。 –

1

あなたは、あなたのボタンのTextプロパティでボタンのホットキーを作成したい文字の前にアンパサンドを置くことができます。フォームデザイナーのプロパティペインからTextプロパティを設定することも、プログラムで設定することもできます。以下はプログラム的アプローチの例です。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     // make the 'B' key the hot key to trigger the key press event of button1 
     button1.Text = "&Button"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("B"); 
    } 
} 
関連する問題