Как получить событие Keypress в элементе управления Windows Panel в C # - PullRequest
10 голосов
/ 25 января 2010

Я хочу получить событие нажатия клавиш в элементе управления windows в c #, мне поможет какая-нибудь помощь ...

Ответы [ 4 ]

11 голосов
/ 25 января 2010

Вы должны обработать событие Panel.KeyPress .

Пример

public void MyKeyPressEventHandler(Object sender, KeyPressEventArgs e)
{
    ... do something when key is pressed.
}

...

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler);
9 голосов
/ 25 января 2010

Проблема в том, что сначала ваша основная форма получила KeyPress и сразу же отправит это сообщение активному элементу управления. Если это не обрабатывает нажатие этой клавиши, оно будет передано родительскому элементу управления и т. Д.

Чтобы перехватить эту цепочку, вы должны ввести в Form.KeyPreview до true и добавить обработчик к Form.KeyPress. Теперь вы можете обрабатывать нажатую клавишу в вашей форме.

3 голосов
/ 16 марта 2010

Объекты "Panel" не могут правильно получить событие "KeyPress".

Я создал Panel перегрузка:

public class PersoPanel : Panel

и использовал переопределенный метод ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

для перехвата нажатых клавиш:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    MessageBox.Show("You press " + keyData.ToString());

    // dO operations here...

    return base.ProcessCmdKey(ref msg, keyData);
}
1 голос
/ 10 декабря 2010

Панель + Клавиша - C # Доски обсуждений - CodeProject

http://www.codeproject.com/Messages/704386/Panel-plus-Keypress.aspx

...