c # захват Ctrl + нажатие клавиши PageUp - PullRequest
2 голосов
/ 29 марта 2010

У меня проблемы с захватом Ctrl + PageUp нажатие клавиши в элементе управления ListView в приложении WinForms.

Я использую этот код для захвата нажатий клавиш -

private void ListViewEx_KeyDown(object sender, KeyEventArgs e)
{
...
if(e.Control){
if((e.KeyCode ^ Keys.Left) == 0)
    MessageBox.Show("Left"); //shows messagebox
else if((e.KeyCode ^ Keys.PageUp) == 0)
    MessageBox.Show("PageUp"); //does not
...
}

Нужно ли погружаться в WndProc для обработки этого ключа? Благодаря.


Редактировать: я обнаружил, что это работает, проблема заключалась в том, что TabControl обрабатывал эти ключи до того, как ListControl получил их.

Ответы [ 3 ]

4 голосов
/ 29 марта 2010

Нет необходимости в WndProc:

if ((e.Modifiers & ModifierKeys) == Keys.Control && e.KeyCode == Keys.PageUp)
{
    // ctrl + page up was pressed
}
4 голосов
/ 29 марта 2010

Аргумент e.KeyData включает ключи-модификаторы. Сделайте так, чтобы это выглядело так:

  if (e.KeyData == (Keys.Control | Keys.PageDown)) {
    // Do your stuff
    Console.WriteLine("Ctrl+PgDn");
  }
2 голосов
/ 29 марта 2010

чек на

Keys.Control | Keys.PageUp
...