1

MSDNのこのページによるとKey Value、Left Controlのforは162です。このキーがコードで押されているかどうかを確認するにはどうすればよいですか?現時点では、キーを押して処理しようとするたびに、17単なる一般的なコントロールキーである値を取得します。2つを区別する方法はありますか?ProcessCmdKeyテキストボックスのオーバーライドと処理を試みましPreviewKeyDownたが、どちらも162ではなく17を返します。すべての修飾キーに対してこれを行う必要があり、値をハードコーディングする前に、これらをコードでキャプチャするためのより良い代替手段はありますか?

編集:コードが追加されました。明確にするために、修飾子を区別する別の方法を見つけるだけでなく、162の番号を取得したいと思います。

private void PortfolioNameTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    var val = e.KeyValue; //17 when control is pressed and not 162

}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    //msg.Wparam = 17
    return base.ProcessCmdKey(ref msg, keyData);
}
4

1 に答える 1

2

パッサン氏は何ヶ月も前にこれに答えました。

KeyEventArgs に含まれていればいいのですが、それでも、次のように実現できます。

    [DllImport("user32.dll")]
    private static extern short GetAsyncKeyState(Keys key);

    private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        Console.WriteLine("Ctrl:{0}, LCtrl:{1}, RCtrl:{2}",
        GetAsyncKeyState(Keys.ControlKey) < 0,
        GetAsyncKeyState(Keys.LControlKey) < 0,
        GetAsyncKeyState(Keys.RControlKey) < 0);
    }
于 2012-03-07T05:06:27.477 に答える