Ответ 1
Установите KeyPreview в true в вашей форме, и вы поймаете их: MSDN
У меня есть родительская форма, содержащая множество элементов управления. То, что я пытаюсь сделать, - это фильтр всех нажатий клавиш для этой формы. Проблема в том, что если фокус находится на одном из элементов управления формы, то родительская форма не получает ключевое событие нажатия клавиши, так как я могу захватить событие с нажатием клавиши?
Установите KeyPreview в true в вашей форме, и вы поймаете их: MSDN
Это будет работать только на форме, но не в том случае, если в фокусе находится любой другой компонент
public partial class ChildForm : Form
{
public ChildForm()
{
KeyPress += KeyPressHandler;
}
public KeyPressHandler(object sender, KeyPressEventArgs e)
{
if (_parent != null)
{
_parent.NotifyKeyPress(e);
}
}
}
Это будет работать, даже когда другие компоненты находятся в фокусе
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
MessageBox.Show("You pressed the F1 key");
return true; // indicate that you handled this keystroke
}
// Call the base class
return base.ProcessCmdKey(ref msg, keyData);
}