非常に興味深い質問に対する称賛。残念ながら、この記事のメインフォームで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);
}
}