0

テキストボックスのあるfromがあり、このテキストボックス内でCtrl-Rが押されているかどうかを確認しようとしています。次を使用して、キーを個別に検出できます。

private void CheckKeys(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if(e.KeyChar == (char)Keys.R)
    {
        // ...
    }
    if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
    {
        // ...
    }
}

彼らが同時に押したかどうかをどのように判断しますか?

4

2 に答える 2

5

可能であれば、イベントをKeyDown/に変更するKeyUpと、すべてが簡単になります。(この解決策は常に適用できるわけではないことに注意してください)

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyData == (Keys.Control | Keys.R))
   {

   }
}
于 2010-12-20T05:31:08.663 に答える
3

ビットフラグロジックを正しく構築する方法については、Mitch の回答を参照してください。彼が決心しなければ、うまくいくものがあります。基本的に、両方の条件が同時に真であるかどうかを確認する必要があります。

bool isRKeyPressed = e.KeyChar == (char)Keys.R;
bool isControlKeyPressed = (Control.ModifierKeys & Keys.Control) == Keys.Control;

if (isRKeyPressed && isControlKeyPressed)
{
    // Both ...
}
else if (isRKeyPressed)
{
    // R key only ...
}
else if (isControlKeyPressed)
{
    // CTRL key only ...
}
else
{
    // None of these...
}

気にしないこれらのチェックはすべて破棄してください。

また、次の代替アプローチを確認してください: http://www.codeguru.com/columns/experts/article.php/c4639

彼らはフォームのメソッドをオーバーライドしますProcessCmdKey(おそらく個々のコントロールで?): http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx

于 2010-12-20T05:21:24.293 に答える