如何在 Windows 窗體應用程序中創建複合鍵盤快捷鍵?
我想創建一個組件,它允許我們擁有與任意命令相關聯的複合鍵盤快捷鍵,就像 Visual Studio IDE 和 Microsoft Office 所做的那樣。
也就是說,由一系列多次擊鍵組成的鍵盤快捷鍵,例如
Ctrl++ 。在 Visual Studio 中,這將打開類視圖。當按下第一組鍵 ( + ) 時,狀態欄中會出現消息“(Ctrl + W) 已按下。等待和弦的第二個鍵…”。W``C``Ctrl``W
專門回答鍵盤和弦的問題,我認為目前沒有現成的選項可供您使用。
但是,建模應該足夠簡單。我會創建一個類,也許
KeyboardChordProvider。它需要了解表單級別的鍵盤事件。如其他地方所述,該Form.KeyPreview屬性必須是true. 此提供者訂閱該Form.KeyPress事件可能就足夠了。如果您傳入表單,則可以在提供者的建構子中完成所有這些操作。您需要向提供商註冊潛在的擊鍵。
在內部,此實例將跟踪目前狀態。每當觀察到表示和弦的第一個鍵的擊鍵時,您將更新提供者的狀態並引發一個事件,以便訂閱者可以設置文本:(CTRL+W) 被按下。等待和弦的第二個鍵…
如果下一次擊鍵與潛在的次要選項匹配,那麼您就有了匹配項,並且可以引發一個
ChordPressed包含所輸入擊鍵詳細資訊的事件。ChordPressed或者,您可能只呼叫在註冊和弦時提供給提供者的特定回調(以避免在事件處理程序中有 switch 語句或其他調度)。如果在任何時候,擊鍵與潛在的下一個選項不匹配,那麼您將重置提供程序的狀態。
在提供者內部,您可以使用樹結構對可能的擊鍵進行建模。提供者的目前狀態只是一個特定的樹節點。一開始,根節點將處於活動狀態。如果一個孩子匹配一個擊鍵,那麼它將成為預期下一個擊鍵的目前節點。如果子節點是葉節點,則整個和弦都已匹配,您將引發
ChordPressed事件(傳遞使您到達該點的筆劃鏈)或呼叫儲存在葉中的回調。每當沒有擊鍵與子節點匹配時,重置回使根節點處於活動狀態。我認為這個設計會達到你想要的。