C#禁用TAB键

时间:2009-09-23 22:21:12

标签: c# character tabs

我有这段代码:

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 个答案:

答案 0 :(得分:4)

您是否尝试在AcceptsTab上设置TextBoxfalse

编辑:

  

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

这没什么意义。我运行了一个小型测试应用,当TextBox AcceptsTab属性Multiline时,标签键只会将焦点从true移开,无论为KeyPress定义事件处理程序。

您确定其他一些代码未将AcceptsTab设置为true吗?如果是,是否将Multiline设置为false会更改标签行为?你能发布更多相关代码吗?

答案 1 :(得分:3)

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

答案 2 :(得分: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键并强制它不执行任何操作。