我有一个继承自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键时,光标不会移动到下一个控件。
我不相信上面的代码就是问题所在。还有什么呢?
修改
控件绑定到数据源时会出现问题。当控件未绑定时,上述行为不会发生。
这是否正常,是否有解决方法?
答案 0 :(得分:0)
可能验证失败,您是否有机会处理任何验证事件?
或者按键可能会被困在更高的位置,当您在测试场景中按Tab键时,代码是否会在OnKeyPress中断?
答案 1 :(得分:0)
解决问题的两种方法:
CausesValidation
属性设置为false
或
AutoValidate
属性设置为EnableAllowFocusChange
答案 2 :(得分:0)
这是因为您尝试插入的数据类型不能存储在数据源中。例如:UI值="测试"(字符串),数据源类型= int。