触发文本框的验证事件后,按钮的Click事件永远不会被触发

时间:2017-07-19 14:49:32

标签: c# winforms visual-studio validation errorprovider

我有一个自定义用户控件,其中包含很少的元素,所以它看起来像这样:

 public bool IsFinished() {
    return _thread == null || !_thread.IsAlive;
  }

现在,如果我单击按钮,就像我在标题中提到的那样,文本框将失去焦点,其验证事件将触发...但按钮的点击将永远不会触发......我猜这是一个通常的行为......但是如果验证没有失败,执行按钮的Click事件的正确方法是什么?

以下是我用于验证的代码:

UserControl
   Textbox
   Button
   ....

所以errRegistration.SetError()已成功执行 - errorMessage为null,表示没有验证错误,所以我猜这很好(我通过设置断点检查了这一点)。

这是按钮的Click事件实现:

 private void txtPassword_Validating(object sender, CancelEventArgs e)
        {
            string errorMessage = _uiValidator.ValidatePassword(txtPassword.Text);

            errRegistration.SetError(txtPassword, errorMessage);
        }

1 个答案:

答案 0 :(得分:0)

    private void btnRegisterUser_Click(object sender, System.EventArgs e)
{
    foreach (Control control in this.Controls)
    {
        // Set focus on control
        control.Focus();
        // Validate causes the control's Validating event to be fired,
        // if CausesValidation is True
        if (!Validate())
        {
            DialogResult = DialogResult.None;
            return;
        }
    }
}

尝试类似的东西。