Как закрыть WinForm с помощью клавиатуры, когда элемент управления имеет фокус - PullRequest
5 голосов
/ 12 мая 2011

Как я могу закрыть свою программу C # WinForms, когда в ней есть некоторые элементы управления, такие как древовидные представления, кнопки и другие элементы, и они имеют фокус, и это может быть то, что они имеют одинаковое сочетание клавиш?

Например, в моемВ дереве, если я нажму клавишу ALT + ESC, узлы будут удалены.но я хочу иметь возможность, нажав клавишу ESC, вызвать метод this.Close () независимо от того, имеет ли фокус какой-либо элемент управления.

Спасибо.

Ответы [ 5 ]

4 голосов
/ 12 мая 2011

Установите для свойства KeyPreview вашей формы значение true.Это позволяет обрабатывать сообщения клавиатуры в обработчиках форм перед обработчиками элементов управления, даже если элемент управления имеет фокус.

2 голосов
/ 12 мая 2011

Может быть, вы можете попробовать это, переопределив Form

protected override bool ProcessDialogKey(Keys keyData)
{
    if (keyData == Keys.Escape)
    {
        this.Close();
        return true;
    }
    else
        return base.ProcessDialogKey(keyData);
}
1 голос
/ 12 мая 2011

Вам необходимо установить для свойства KeyPreview формы значение true. Это позволит форме регистрировать нажатия клавиш до того, как они будут переданы на элементы управления, что позволяет вам перехватывать их и передавать их, если вы хотите, или делать что-то еще, например закрывать форму комбинацией клавиш. .

0 голосов
/ 12 мая 2011

Он уже встроен в Windows. Alt-F4 закроет приложение переднего плана. Вам не нужно делать ничего особенного, чтобы справиться с этим самостоятельно. Если вы хотите закрыть только одно окно, а не все приложение, например, в интерфейсе в стиле MDI, то Ctrl-F4 поможет.

0 голосов
/ 12 мая 2011

Установите для свойства KeyPreview формы значение true (оно будет передавать событие keyborad в форму перед элементами управления.), И напишите код для события KeyXXX, а также проверьте наличие ключа ESC и вызовите this.close()

...