1

我有这个代码:

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

私人无效按键(对象发送者,KeyPressEventArgs e)
{
    // 如果 Tab 已经被按下
    if(122 == (int)e.KeyChar)
    {
        switchTab(sTab);
        MessageBox.Show(sTab);
    }
}

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

任何人都知道我怎样才能使这项工作?

我试图设置 e.Handled = true; 但这没有用...

4

3 回答 3

6

您是否尝试过AcceptsTab设置TextBoxto false

编辑:

是的。这没用。奇怪......它仍然在文本框中列出

这没什么意义。我运行了一个小型测试应用程序,并且 tab 键只会将焦点从TextBoxAcceptsTab Multiline属性都trueKeyPress.

您确定其他代码未设置AcceptsTabtrue吗?如果是,是否设置Multiline更改false选项卡行为?您能否发布更多相关代码?

于 2009-09-23T22:23:33.057 回答
3

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

于 2009-09-23T22:23:01.647 回答
2

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

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);
    }
}

构建解决方案,然后通过在工具箱的用户控件下找到它,用新的“NoTabTextBox”替换您的常规文本框。

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

于 2018-01-13T13:45:59.223 回答