Dot-Net
在 UserControl 中擷取 KeyDown 事件
我有一個帶有幾個子控制項的使用者控制項。我需要使用者界面對按鍵做出反應,所以我決定將處理程式碼放在 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 事件路由到我的使用者控制項。
當然,在解除安裝使用者控制項時刪除事件處理程序很重要。
我希望這可以幫助現在面臨類似問題的人。