4

フォームのホットキーを作成してみる

コード

    private void FormMain_KeyPress(object sender, KeyPressEventArgs e)        
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            MessageBox.Show("e");
        }
    }

1つのキーで機能しますが、CTRL + Nなどのキーの組み合わせを使用したい場合は、使用してみてくださいif (e.KeyChar == (char)Keys.Enter && e.KeyChar == (char)Keys.N)-しかし、機能していません。私は正しいです-キーの組み合わせにそのようなコードを使用していますか?

編集

編集

このコードは、最初に押されたキーのみをキャプチャしますが、組み合わせはキャプチャしません - したがって、CTRL + Enter を押すと、コードは CTRL をキャプチャしますが、Enter キーはキャプチャしません - 追加を作成しようとしますifが、結果は同じです...


イベントを からKeyPressに変更KeyDown- これで問題ありません

4

2 に答える 2

3

と別の文字の他の組み合わせについてControlは、興味深いことに、e.KeyCharは異なるコードになります。たとえば、通常e.KeyChar = 'a'は のコードですが、 (または)97を押すControl前に を押すと、実際のコードは になります。したがって、他の組み合わせを処理するための次のコードがあります。aA1

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)        
{
   //Pressing Control + N
   if(e.KeyChar == 'n'-96) MessageBox.Show("e");
   //Using this way won't help us differentiate the Enter key (10) and the J letter 
}

KeyDownこの目的でイベントを使用することもできます。(実際にKeyDownは、より適しています)。KeyData修飾キーと別のリテラル キーの組み合わせ情報を含む をサポートしているためです。

private void FormMain_KeyDown(object sender, KeyEventArgs e){
   //Pressing Control + N
   if(e.KeyData == (Keys.Control | Keys.N)) MessageBox.Show("e");
}
于 2013-09-29T08:42:53.153 に答える
1

Ctrl+ N、の組み合わせでこれを試してください

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N)
   {
      MessageBox.Show("e");
   }
于 2013-09-29T09:05:32.040 に答える