首页 文章

C#禁用TAB键

提问于
浏览
1

我有这个代码:

this.searchInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputKeypress);

private void Keypress(object sender, KeyPressEventArgs e)
{
    // If Tab has been pressed
    if(122 == (int)e.KeyChar)
    {
        switchTab(sTab);
        MessageBox.Show(sTab);
    }
}

它的作用是将焦点集中在另一个元素上 . 但是,当焦点设置为TextBox,并且我按TAB时,它只在TextBox中创建一个选项卡,并且不会将焦点设置在下一个元素上 .

任何人都知道如何才能完成这项工作?

我试过设置e.Handled = true;但那不起作用......

3 回答

  • 4

    您是否尝试将 TextBox 上的 AcceptsTab 设置为 false

    编辑:

    是的 . 这是行不通的 . 奇怪......它仍然在文本框中列表

    这没什么意义 . 我运行了一个小测试应用程序,当 AcceptsTabMultiline 属性都是 true 时,tab键只会使焦点远离 TextBox ,无论是否为 KeyPress 定义了事件处理程序 .

    你确定其他一些代码没有将 AcceptsTab 设置为 true 吗?如果是,将 Multiline 设置为 false 是否会更改选项卡行为?你能发布更多相关代码吗?

  • 3

    将文本框的 AcceptsTab 属性设置为 false

  • 0

    您需要像这样创建控件的实例,并重写以下方法:

    using System.Windows.Forms
    
    //optional namespace
    
    public class NoTabTextBox : TextBox
    {
        protected override bool IsInputKey(Keys keyData)
        {
            switch (keyData)
            {
                case Keys.Tab:
                    return true;
            }
            return base.IsInputKey(keyData);
        }
    
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Tab) { e.Handled = true; e.SuppressKeyPress = true; }
            base.OnKeyDown(e);
        }
    }
    

    构建解决方案,然后通过在工具箱中的用户控件下找到它,将常规TextBox替换为新的'NoTabTextBox' .

    这将捕获Tab键并强制它不执行任何操作 .

相关问题