Как поймать нажатие клавиши на форме C # .NET - PullRequest
14 голосов
/ 09 июня 2010

У меня есть родительская форма, которая содержит много элементов управления.Я пытаюсь отфильтровать все нажатия клавиш для этой формы.Проблема в том, что если фокус находится на одном из элементов управления в форме, то родительская форма не получает событие нажатия клавиши, так как мне захватить событие нажатия клавиши?

Ответы [ 2 ]

39 голосов
/ 09 июня 2010

Установите для KeyPreview значение true в вашей форме, и вы поймете их: MSDN

4 голосов
/ 16 января 2013

Это будет работать только на форме, но не в том случае, если в фокусе находится любой другой компонент

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...