Обрабатывается необработанная клавиша ввода c # - PullRequest
0 голосов
/ 02 октября 2010

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

Итак, когда нажата клавиша ввода, когда вTextBox или DateTimePicker, я хочу обработать его с помощью формы (без звука ошибки), но если он нажимается, например, в DataGridView, я хочу, чтобы он обрабатывался так, как это делает DataGridView по умолчанию.

OnKeyUpрешает мою проблему с обработкой только необработанных нажатий клавиш (e.Handled), а ProcessCmdKey ( this ) решает проблемы со звуком, но ни один из них не решает оба.

Есть предложения?

1 Ответ

0 голосов
/ 02 октября 2010

Слава за очень интересный вопрос. К сожалению, я не могу найти глобальный обработчик событий для всех нажатий клавиш, кроме переопределения ProcessCmdKey в главной форме для этой статьи . Единственная проблема этого метода заключается в том, что аргументы, передаваемые делегату обработчика событий, не определяют, какой элемент управления создает событие: (

Итак, моя единственная мысль - вам нужно назначить свой обработчик событий каждому элементу управления в приложении. Я написал некоторый код, который должен помочь вам показать, как это сделать. Хотя я не уверен, какие негативные последствия может иметь назначение обработчика событий KeyPress для каждого элемента управления на вашей странице, но это единственное возможное решение, которое я вижу.

Код:

private void Form1_Load(object sender, EventArgs e)
{
    AssignHandler(this);
}

protected void HandleKeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter && (sender != this.textBoxToIgnore || sender ! this.gridViewToIgnore))
    {
        PlaySound();  // your error sound function
        e.Handled = true;
    }
}

public void AssignHandler(Control c)
{
    c.KeyPress += new KeyPressEventHandler(HandleKeyPress);
    foreach (Control child in c.Controls)
    {
        AssignHandler(child);
    }
}
...