textbox只要將form的active control改成null或其他control就可以取消輸入狀態
但如果今天是想取消鍵盤事件對子Control的校果(例如只在特定狀態下讓快捷鍵能對子control作用)就沒這麼簡單
主要的問題是出在取消active control只是讓使用者不會繼續輸入,但是鍵盤事件一樣會被control接收到
要讓control不要接收到事件有兩個方法
1. 將focus指到label之類的其他事件
雖然form的canFocus屬性是true,但真的focus到form上,鍵盤按下去,control還是會收到event最簡單的方法就是找個不能輸入的替死鬼(ex:一個label)把它focus起來
label1.Focus()
這樣目標control就脫離苦海了
這方法看似蠢,其實很好用,因為有些事件不一定是你在你的程式寫的。如果叫用函式庫,他可能搶在你的form preview之前就先把event處裡掉,第二招就會無效
2. 利用form.keyPreview攔截事件
將form的kePreview打開在form1.KeyXXX事件中 將KeyEventArgs e的Handled改為true
如此event就不會往下傳了,也就是說子Control的KeyXXX不會被觸發
結論
當Focus在Control上(Form先天無法得到Control)keyPreview關閉: Form的KeyXXX不會被觸發
keyPreview開啟:Form的KeyXXX先被觸發,Control的KeyXXX才被觸發。若在Form的觸發中將Handeled改為true,Control不會被觸發
沒有留言:
張貼留言