如何从单击另一个TextBox时验证失败的TextBox中释放Focus

时间:2017-12-14 18:40:06

标签: c# windows winforms validation

这是我的情景。我正在使用验证事件。如果我引入了一个错误的值(因为我的验证事件的逻辑确定它是错误的),它在Tab键时不会从该TextBox释放焦点,但是,这是否意味着当我使用它时它也不会这样做点击另一个TextBox?

Focus problem on image

我错过了有关验证的内容吗?我是否应该使用另一种方式来强制数据验证,如果我想要重点放在焦点上,还是我可以实现解放它的点击事件?

这是我使用的验证事件,例如,名称(" Nombre"):

public class User {

public String email;
public String name;

public User() {
}

public User(String email, String name) {
    this.email = email;
    this.name = name;
}}

1 个答案:

答案 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事件。在这里,您仍然可以验证文本框的值,同时仍允许其他控件获得焦点。