正常情況下,按Tab鍵時,按給定Tab鍵順序將焦點更改爲下一個控件。我想阻止它,並讓TAB鍵做其他事情。就我而言,我希望將焦點從一個組合框更改爲一個完全不同的控件。我無法通過設置標籤順序來做到這一點。我需要以編程方式進行此操作。任何想法如何?看起來KeyDown和KeyPress事件不能正確處理TAB鍵。 謝謝。如何攔截TAB鍵以防止C#中的標準焦點更改
回答
覆蓋您的表單上的ProcessDialogKey
或ProcessTabKey
並根據所關注的控件執行您想要的邏輯。
覆蓋控件的LostFocus事件見鏈接下面的例子:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx
您可以嘗試在你的KeyDown
事件驗證碼:
if (e.KeyCode == Keys.Tab) {
//your logic
e.SuppressKeyPress = true;
}
如果點擊該按鈕選項卡,然後做任何您想要的定製邏輯,然後致電SuppressKeyPress
停止KeyPress
事件觸發併爲您調用正常的Tab邏輯。
由於我正在構建UserControl,因此我最終在控件上使用了PreviewKeyDown
事件。這避免了必須處理主機窗體上的按鍵事件。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx
基於使用PreviewKeyDown事件的JRS的建議,該發送按鍵通過對控制:
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Tab)
e.IsInputKey = true;
}
然後,如果你想自定義你可以處理控件的KeyDown事件行爲:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab)
{
MessageBox.Show("The tab key was pressed while holding these modifier keys: "
+ e.Modifiers.ToString());
}
}
文本框基礎替代方案
如果控制來源於TextBoxBase
(即, TextBox
或RichTextBox
),其中Multiline
屬性設置爲true
,那麼您可以簡單地將AcceptsTab
屬性設置爲true
。
TextBoxBase.AcceptsTab Property
獲取或設置指示的值是否按壓TAB鍵在多行文本框控件類型中的控制的TAB字符,而不是移動焦點到Tab順序中下一個控制。
我正在給示例添加'e.SuppressKeyPress = true;',但奇怪的是'MessageBox'似乎阻止它工作(這是一個完全獨立的問題)。 – Zantier 2014-05-07 12:47:51
- 1. 如何防止Gnome攔截Alt + Shift +〜鍵?
- 2. 在RichEdit中攔截TAB鍵
- 3. 如何更改tabhost中的Tab焦點?
- 4. 如何更改tabhost中的Tab焦點?
- 5. 使用Tab鍵防止控件接收焦點
- 6. 如何防止字符串被攔截
- 7. C# - 攔截屬性更改
- 8. 如何攔截WinForms應用程序中的捕獲TAB鍵?
- 9. 在標籤keydown事件攔截後改變焦點
- 10. 攔截Hibernate標準查詢
- 11. 防止角材料中的標籤更改事件md-tab
- 12. ShowDialog退出時如何防止焦點更改?
- 13. 防止控件竊取鍵盤焦點
- 14. 防止被攔截的方法 - 城堡
- 15. 如何使用Tab鍵在TextEdit框之間改變焦點
- 16. 如何攔截TAB鍵按下以關注在TAB鍵被按下後啓用的複選框?
- 17. 攔截SetChildIndex的值更改
- 18. 如何更改參數以防止xgboost準確性卡住
- 19. Javascript:如何攔截window.location更改
- 20. 攔截按鍵,即使形式不具有焦點
- 21. 如何防止c#在MDI父項中失去焦點?
- 22. 如何防止CWnd獲得焦點?
- 23. 如何防止Popup失去焦點?
- 24. 如何防止gridview獲得焦點?
- 25. 焦點和Tab鍵的問題在IE
- 26. 攔截髮送請求以更改請求庫的標頭
- 27. 防止WPF中的Alt鍵對焦Mainmenu
- 28. 如何防止Safari攔截對Ajax請求的401響應
- 29. 攔截剪貼板更改
- 30. 如何在IE中攔截Tab中的ActiveX按鈕
e.SuppressKeyPress = true; – 2013-09-20 04:36:46
至少對於Telerik控件來說,當按下Tab時不會觸發KeyDown事件。 – 2017-03-26 00:39:52