0

ユーザーコントロールでキーダウンを処理するために、次のコードを使用します。しかし、キープレスのユーザーコントロールで同じことができる方法を知りたいです。

const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;

protected override bool ProcessKeyPreview(ref Message m)
{
    if (m.Msg == WM_KEYDOWN && (Keys)m.WParam == Keys.A)
    {
        messagebox.show("You have pressed A");
    }

    return base.ProcessKeyPreview(ref m);
}

keypress の keychar に対してこれを行いたいと思います。

これらのコードは、keychar ='A' の例では動作させられません。

前もって感謝します

4

1 に答える 1

5

KeyPressイベントは、KeyDownおよびKeyUpイベントとは大きく異なります。KeyDownイベント処理をオーバーライドするには、ProcessKeyPreviewやProcessCmdKeyなどのオーバーライドのみを使用します。

このようなオーバーライドは仮想キーのみを参照します。これは誰のキーボードでも同じです。KeyDownのデフォルトの処理では、ユーザーが選択した特定のキーボードレイアウトを適用するWindows内のコードを介して仮想キーが送信されます。そして、それが「a」や「A」などのタイピングキーを生成する場合、または韓国語のキーボードで何がわからない場合は、KeyPressイベントが生成されます。これはフォーカスを持ってコントロールに直接配信されますが、KeyPressイベントのイベントハンドラーを実装することによってのみ、コントロールでインターセプトできます。

前の段落の「わからない」句は重要な部分です。入力キーを傍受しようとすることは、一般的に意味がありません。「a」と「A」の区別を除いて、ソフトウェアの潜在的なユーザーは20億人に上り、人生で「A」を入力したことはありません。そうでなければ、なぜあなたがこれをやろうとしているのか正確にはわからないので、私は別のアプローチを提案することはできません。

于 2012-05-17T12:07:58.647 に答える