正常情況下,按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應用程序中失去焦點?
- 9. 如何攔截WinForms應用程序中的捕獲TAB鍵?
- 10. 如何攔截GNU C標準庫中的__fork()?
- 11. 攔截TAB鍵並將其抑制
- 12. 如何防止shift + tab焦點掉出來?
- 13. 如何更改ime鍵盤焦點鍵?
- 14. 如何攔截javascript中的innerHTML更改?
- 15. 在標籤keydown事件攔截後改變焦點
- 16. 如何更改c#中的TextBox焦點?
- 17. 攔截Hibernate標準查詢
- 18. 防止角材料中的標籤更改事件md-tab
- 19. ShowDialog退出時如何防止焦點更改?
- 20. 當Tab焦點變化時更改ImageView
- 21. 防止被攔截的方法 - 城堡
- 22. 防止滾動,而鍵盤的Tab鍵
- 23. 防止控件竊取鍵盤焦點
- 24. 如何攔截TAB鍵按下以關注在TAB鍵被按下後啓用的複選框?
- 25. 焦點防止onclick
- 26. 攔截SetChildIndex的值更改
- 27. WPF鍵盤焦點和Tab鍵
- 28. 創建DLL來攔截更改標題
- 29. 如何攔截按鍵?
- 30. 如何攔截擊鍵?
e.SuppressKeyPress = true; – 2013-09-20 04:36:46
至少對於Telerik控件來說,當按下Tab時不會觸發KeyDown事件。 – 2017-03-26 00:39:52