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