我開發了Windows窗體應用程序(.NET 4.6,VS.2017),我有兩種形式,主窗體和非模態窗體。在這兩種形式中,我需要趕上用戶按下F2鍵。 這是順便說一下應用程序使用的唯一功能鍵,沒有爲其他功能鍵定義的其他快捷鍵。沒有菜單項衝突的窗體級捕獲功能鍵
在這兩種表格中我都使用了Form.KeyPreview,默認情況下它是false。然後,我還實施了KeyDown事件,並在其中我檢查它是否是我的功能鍵:
private void myView_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2) // breakpoint placed here!
{
// perform action
e.Handled = true;
}
}
做那我已經放在哪個鍵被按下,而不是內部的IF語句檢查斷點通知行動塊。
現在在我的非模態窗體中,無論選擇哪個功能鍵,它都能正常工作。
但是,主表單顯示出相同代碼的怪異行爲。如果在主窗體中使用'e.KeyCode == Keys.F3',則斷點會觸發按下除F3以外的所有其他功能鍵。
因此,我然後改變if語句,而不是檢查F2而不是F3。但是現在隨着這種改變,斷點觸發除F2以外的所有功能鍵,所以F3之前不工作(檢查F3時)現在可以工作,但F2不工作。
無論我選擇哪個功能鍵,斷點都會觸發所有功能鍵,除了我選擇的功能鍵。
雖然...在我的一個ToolStripMenuItems中,我還將相同的功能鍵作爲快捷鍵,因爲它們執行相同的操作(然後用戶不必按Alt G,然後按Alt鍵,而是改爲使用F2直接
所以,如果我從ToolStripMenuItem中刪除快捷方式,然後我的表單KeyDown按預期工作,但沒有視覺提示給用戶,他可以使用F2來完成該功能。此外,無論是tooltripmenuitem還是形式都不會對所選功能鍵起作用。
然後,我可以做些什麼來使快捷鍵適用於工具條菜單項和形成水平?
除了斷點被擊中與否之外,還有什麼問題?編譯優化可能會導致您正在觀察的內容,除非存在實際問題,否則我不會擔心。 –
問題是我想擁有tooltrip菜單項以及鍵盤輸入的快捷鍵,因爲在這兩種情況下F2都應該執行一項功能。但它似乎無法處理這兩種類型 –
爲什麼使用KeyDown事件和KeyPreview?設置快捷鍵似乎達到了你想要的行爲。 –