Dot-Net

在 UserControl 中擷取 KeyDown 事件

  • May 31, 2019

我有一個帶有幾個子控制項的使用者控制項。我需要使用者界面對按鍵做出反應,所以我決定將處理程式碼放在 MainControl_KeyDown 事件中。但是,當我在應用程序中按下某個鍵時,此事件不會觸發。

我通過一個依賴於使用 Windows API 的搜尋引擎找到了一個解決方案,我想避免這種情況,因為對於應該由 .NET 框架正確支持的功能來說,這似乎有點矯枉過正。

您可以將以下方法添加到您的usercontrol

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if ((keyData == Keys.Right) || (keyData == Keys.Left) ||
      (keyData == Keys.Up) || (keyData == Keys.Down))
  {
   //Do custom stuff
   //true if key was processed by control, false otherwise
   return true;
  }
  else
  {
   return base.ProcessCmdKey(ref msg, keyData);
  }
}

我知道這個執行緒有點舊,但我遇到了類似的問題並以不同的方式處理它:

在主視窗中,我將 KeyPreview 屬性更改為 true。我在使用者控制項中註冊了主視窗的 KeyDown 事件處理程序。

this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);

這使我無法將每個子控制項的 KeyDown 事件路由到我的使用者控制項。

當然,在解除安裝使用者控制項時刪除事件處理程序很重要。

我希望這可以幫助現在面臨類似問題的人。

引用自:https://stackoverflow.com/questions/1152784