c # как захватить Ctrl-R из текстового поля - PullRequest
0 голосов
/ 20 декабря 2010

У меня от этого есть текстовое поле, и я пытаюсь определить, нажата ли 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)
    {
        // ...
    }
}

Как определить, нажали ли они одновременно?

Ответы [ 2 ]

5 голосов
/ 20 декабря 2010

Если возможно, измените ваше событие на KeyDown / KeyUp, все будет проще.(Обратите внимание, что это решение не всегда применимо)

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

   }
}
3 голосов
/ 20 декабря 2010

См. Ответ Митча о том, как правильно построить логику битового флага, если он ее восстанавливает. Вот то, что сработает, если он не решит. В основном вам необходимо проверить, выполняются ли оба условия одновременно:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...