KeyPreview (KeyUp) передача обработчика KeyUp к формам создается в методе

Проблема

Странная проблема. У нас есть две формы: окно главного приложения и форма настроек. Основной форме установили ее KeyPreview на истинный, и метод, присоединенный к ее событию 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 к истинному, событие KeyUp все еще передается MySettings форма. Я проследил это до ControlNativeWindow.OnMessage получение, что, кажется, другое событие (его свойства Handled и SuppressKeyPress имеют значение false), и передача этого к форме и его сфокусированному управлению.

Вопросы

  • В первую очередь, почему событие передается несмотря на то, чтобы давать команду .NET не сделать так?
  • Во-вторых, как я препятствую тому, чтобы событие стреляло?

Любые идеи будут очень цениться, у меня заканчиваются они самого.

1
задан Dav 6 July 2010 в 11:13
поделиться

2 ответа

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

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

2
ответ дан 2 September 2019 в 23:16
поделиться

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

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

0
ответ дан 2 September 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: