3

私はアプリケーションの関数として使用したいと考えてC#います。私は a を使用し、このキーは文字 P の右に 2 つのキーがあります (それは "+" です)。このキーを と組み合わせて押し、フォーカスが aにあるときはいつでも、ビープ音が鳴ります。 これは、レイアウトに切り替えたときにも発生します (まだ my を使用しています)。これは. アドレスバー でこのキーを押すと、同じことが起こります。私の質問は:Windows FormsCtrl+"Oemplus"keyGerman keyboardCtrlTextBox
US keyboardGerman keyboard] key
Internet Explorers

  1. このキーの組み合わせが TextBox でビープ音を鳴らすのはなぜですか。
  2. どうすればビープ音を回避できますか?

あなたがこれにかけた努力に感謝します。
更新:
US/Thai キーボードで試してみたところ、ビープ音も鳴りました。これは、使用する論理キーボード レイアウト (ドイツ語、米国語、タイ語) に関係なく発生します。
ビープ音は Windows エクスプローラーのアドレス バーでも発生しますが、検索ボックスでは発生しません。

4

3 に答える 3

7

そのキーストロークを押したときに何が起こるかは非常に不明確です。TextBox は疑いの余地がありません。ユーザーが何か特別なことをしようとしていることはわかりますが、正確にをしようとしているのかはわかりません。ビープ音を鳴らす正当な理由。解決策は、この次のスニペットの //.. コメントに魔法を実装することです。最後にビープ音を止める追加のコードを使用します。

    private void textBox1_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == (Keys.Control | Keys.Oemplus)) {
            // Invoke magic
            //...

            // Magic is done now:
            e.Handled = e.SuppressKeyPress = true;
        }
    }
于 2012-08-05T22:48:58.217 に答える
3

私が信じているのは、キーの組み合わせがテキストボックスで許可されていないため、エラーが発生していることです。このコードでキーの組み合わせをテストできます (EN Windows で右角括弧キーを使用) 。SuppressKeyPressを使用して、ビープ音を防ぐためにキーの組み合わせが基になるコントロールに渡されるのを防ぎます。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (ModifierKeys == Keys.Control)
        if (e.KeyValue == 221) // You may need to determine this value for your keyboard layout.
        {
            textBox1.Text += " + "; // Handle the Key combination.
            e.SuppressKeyPress = true;  // Prevents key from being passed to underlying control
        }

}
于 2012-08-05T22:21:30.590 に答える