按 Tab 键不会离开 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 中的代码是否中断?
解决问题的两种方法:
- 设置每个控件
CausesValidation
属性到false
或
- 将表单的
AutoValidate
属性 设置为 EnableAllowFocusChange
这是因为您尝试插入的数据类型无法存储在数据源中。例如:UI 值 = "test"(字符串),数据源类型 = int.
我有一个继承自 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 中的代码是否中断?
解决问题的两种方法:
- 设置每个控件
CausesValidation
属性到false
或
- 将表单的
AutoValidate
属性 设置为EnableAllowFocusChange
这是因为您尝试插入的数据类型无法存储在数据源中。例如:UI 值 = "test"(字符串),数据源类型 = int.