Обработчик KeyPreview (KeyUp), передающий KeyUp формам, созданным в методе - PullRequest
1 голос
/ 06 июля 2010

Выпуск

Странная проблема. У нас есть две формы: главное окно приложения и форма настроек. У главной формы KeyPreview установлено значение true, а к событию KeyUp присоединен метод. Это делается для того, чтобы окно настроек можно было открыть с помощью сочетания клавиш (ctrl-m):

private void MyShortcuts(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.M)
    {
        e.Handled = true;
        e.SuppressKeyPress = true;
        MySettings sett = new MySettings();
        sett.Show();
    }
}

Теперь этот бит работает просто отлично. Однако проблема в том, что, несмотря на установку свойств Handled и SuppressKeyPress в true , событие KeyUp все еще передается в MySettings форма. Я проследил это до ControlNativeWindow.OnMessage получения того, что кажется другим событием (его свойства Handled и SuppressKeyPress установлены в false), и передачи его в форму и ее сфокусированное управление.

Вопросы

  • Прежде всего, почему событие проходит, несмотря на то, что .Net не дает этого сделать?
  • Во-вторых, как я могу предотвратить запуск события?

Любые идеи будут оценены по достоинству, я сам исчерпал их.

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Здесь происходит то, что клавиши M и CTRL вызывают два отдельных события KeyUp (что является нормальным поведением).Когда вы нажимаете CTRL, а затем M и затем убираете палец с клавиши M, возникает событие KeyUp, которое ваш обработчик в главной форме ловит и использует для отображения формы настроек.Затем вы убираете палец с клавиши CTRL, которая вызывает другое событие KeyUp (на этот раз в форме настроек, которая теперь является активной формой).

В форме настроек вы можете простоотметьте e.Control и проигнорируйте событие, если оно true.

0 голосов
/ 06 июля 2010

Вместо события KeyUp следует использовать событие KeyDown.

Если вы посмотрите на документацию , то увидите, что перед событием KeyUp будет генерироваться событие KeyPress, и оно будет отслеживаться вашей формой настроек.

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