我有一個Windows.Worms應用程序。在我的一種形式中,我使用與其關聯的ContextMenu(而不是ContextMenuStrip)顯示DataGridView。 ContextMenu中的MenuItems定義了快捷方式。從窗體發送KeyEvent到控件
這是文本菜單是如何創建的:
Private _contextMenu As _
New ContextMenu(_
New MenuItem() { _
New MenuItem("Item A", AddressOf ItemA_Click, Shortcut.CtrlA) With {.DefaultItem = True}, _
New MenuItem("Item B", AddressOf ItemB_Click, Shortcut.CtrlB), _
New MenuItem("Item C", AddressOf ItemC_Click, Shortcut.CtrlC), _
...
}) _
With {.Name = "MyContextMenu"}
如果我的DataGridView有焦點,我按Ctrl + A ItemA_Click被調用。
現在我想快捷方式爲我的整個表單工作,即使DataGridView沒有焦點。
顛倒的方式很容易,我只需要將表格的KeyPreview設置爲true
。但我想將事件傳遞給我的DataGridView。
我試圖從DataGridView調用OnKeyDown和OnKeyPress方法,但兩者似乎都不起作用。我不知道它,但我想ContextMenu忽略鍵...事件和掛鉤到消息隊列,但我沒有得到如何將我的System.Windows.Forms.KeyEventArgs轉換爲Windows消息。
就在想:
- 聚焦在DataGridView和使用的SendKeys因爲只有我死了一個解決方案。
- 我無法從ContextMenu中取出邏輯並使用KeyPreview或smth。喜歡這個。
嗯...這是否有問題在兩個獨立的地方處理快捷方式...即:如果您將Ctrl + M添加到您的ContextMenu中,則必須記住在您的KeyDown事件處理程序中處理該快捷方式。 。 。 也許完全從ContextMenu中刪除快捷鍵,所以處理快捷鍵的代碼中只有一個點? – Yoopergeek 2009-06-18 14:25:45
@Yoopergeek:就是這一點。我無法將快捷方式從Contextmenu移動到表單,因爲它是動態創建的,表單不知道它是否存在。 – 2009-06-19 07:03:10