按 T​​ab 键不会离开 TextBox

Pressing Tab is not leaving the TextBox

我有一个继承自 TextBox 的自定义控件。我向其中添加了以下代码:

public enum TextType : byte
{
    AlphaNumeric = 0,
    Numeric,
    Currency,
}

protected override void OnKeyPress(KeyPressEventArgs e)
{
    base.OnKeyPress(e);

    if (this.textType == TextType.Numeric)
    {
        e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
    }

    else if (this.textType == TextType.Currency)
    {
        e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != ',';
    }
}

键入时,上面的代码可以正确执行。但是,我有一个奇怪的问题:

当我进入控件并简单地按下Tab(控件仍然是空的)时,光标移动到下一个控件。但是当我输入一些文本,清除文本并按Tab时,光标不会移动到下一个控件。

我不认为上面的代码是问题所在。还能是什么?

编辑

当控件绑定到数据源时出现问题。当控件未绑定时,不会发生上述行为。

这是否正常,是否有解决方法?

可能是验证失败,您是否正在处理任何验证事件?

或者按键可能被困在更高的位置,当您在测试场景中按下 tab 键时,您的 OnKeyPress 中的代码是否中断?

解决问题的两种方法:

  1. 设置每个控件CausesValidation 属性到false

  1. 将表单的 AutoValidate 属性 设置为 EnableAllowFocusChange

这是因为您尝试插入的数据类型无法存储在数据源中。例如:UI 值 = "test"(字符串),数据源类型 = int.