这是我的情景。我正在使用验证事件。如果我引入了一个错误的值(因为我的验证事件的逻辑确定它是错误的),它在Tab键时不会从该TextBox释放焦点,但是,这是否意味着当我使用它时它也不会这样做点击另一个TextBox?
我错过了有关验证的内容吗?我是否应该使用另一种方式来强制数据验证,如果我想要重点放在焦点上,还是我可以实现解放它的点击事件?
这是我使用的验证事件,例如,名称(" Nombre"):
public class User {
public String email;
public String name;
public User() {
}
public User(String email, String name) {
this.email = email;
this.name = name;
}}
答案 0 :(得分:0)
验证事件处理程序的本质是操纵哪个控件具有焦点,而且在此事件中设置焦点是一个坏主意。
来自Validating
活动的MSDN:
使用键盘(TAB,SHIFT + TAB等)更改焦点时,通过调用Selector SelectNextControl方法或将ContainerControl.ActiveControl属性设置为当前表单,焦点事件发生在以下顺序:
Enter,GotFocus,Leave,Validating,Validated,LostFocus
使用鼠标或通过调用Focus方法更改焦点时,焦点事件按以下顺序发生:
Enter,GotFocus,LostFocus,Leave,Validating,Validated
请勿尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点。这样做可能会导致应用程序或操作系统停止响应。
因此,GotFocus / Leave / LostFocus事件都会被触发并在此Validating
事件中被操纵,因此,尝试自己处理焦点是一个坏主意。
如果您希望自由同时验证字段并仍然允许更改焦点,则应将代码移至Leave
事件。在这里,您仍然可以验证文本框的值,同时仍允许其他控件获得焦点。