Форма не будет запускать KeyDown - PullRequest
0 голосов
/ 20 октября 2011

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

Редактировать: у меня есть контекстное меню и меню.

Событие KeyDown формы не сработает, если у сетки данных нет фокуса. Если кнопка имеет фокус, она не срабатывает. Даже после загрузки формы, когда она имеет фокус, она все равно не будет запускать событие KeyDown.

Как убедиться, что событие KeyDown формы будет запускаться независимо от того, где находится фокус на форме?

Я гуглил и смотрел на другие вопросы, такие как Windows.Form не запускает событие keyDown но не могу понять это.

Событие загрузки формы:

    private void Kasse_Load(object sender, EventArgs e)
    {
        this.BringToFront();
        this.Focus();
        this.KeyPreview = true;
    }

Событие KeyDown формы:

private void Kasse_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
            try
            {
                e.Handled = true;
                dataGridView1.Rows[dataGridView1.SelectedRows[0].Index - 1].Selected = true;
            }
            catch (Exception)
            {
            }
            break;
        case Keys.Down:
            try
            {
                e.Handled = true;
                dataGridView1.Rows[dataGridView1.SelectedRows[0].Index + 1].Selected = true;
            }
            catch (Exception)
            {
            }
            break;
    }
}

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Клавиши курсора используются до того, как событие KeyDown формы может сработать. Вы должны обнаружить их раньше. Переопределить ProcessCmdKey:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == Keys.Up) {
            // etc...
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
2 голосов
/ 20 октября 2011

Если вы пытаетесь захватить клавиши со стрелками, это специальные клавиши управления.Вам также придется переопределить ProcessCmdKey

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{     
    if (keyData == Keys.Left) DoSomething();
    else if (keyData == Keys.Right) DoSomethingElse();
    else return base.ProcessCmdKey(ref msg, keyData); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...