错误提供者 c# winforms

Errorprovider c# winforms

我正在 c# winforms 应用程序中使用 errorprovider。 现在我想进行 "double" 验证。一次直接在文本字段上,所以用户看到他犯了一些错误,一次在按钮本身上。所以当仍然有错误时,"save" 按钮将保持灰色或 "disabled".

因为我不想在我的用户犯错误时阻止他,我希望他能够在他希望使用事件 "leave" 或失去焦点时随时进行更改。这是因为否则我注意到你不能去另一个领域,直到你改变你的错误。

所以,现在代码:

    private void txtFirstname_Leave(object sender, EventArgs e)
    {
        if (!InputChecks.IsFilledIn(txtFirstname.Text))
        {
            errorProvider1.SetError(txtFirstname, "Firstname needs to be filled in!");
            isValidated = false;

        }
        else
        {
            errorProvider1.SetError(txtFirstname, "");
            isValidated = true;

        }
    }

到目前为止,还不错。错误提供程序工作正常,我的用户可以随时编辑。

 public void setSaveButton()
    {
        if (isValidated == true)
        {
            btnSave.Enabled = true;

        }
        else
        {
            btnSave.Enabled = false;
        }   
    }

 bool isValidated;
    private void btnSave_Click(object sender, EventArgs e)
    {

        if (isValidated == true)
        {

            employeePresenter.addEmployee(txtFirstname.Text, txtLastname.Text, txtUsername.Text, txtPassword.Text);
        }



    }

这在我脑海中还算不错。但是,因为我让用户能够随时更改问题,所以这是行不通的。我试图将方法 "setSaveButton()" 放在 "isvalidated" 下,但这也不起作用。因为失去了焦点。

有人对此有更好的主意吗?我一直在查看 google,我发现的唯一内容是错误提供者的单一验证或事件验证。但是这些事件不允许用户随时编辑他们的错误。它将它们阻止到一个特定的文本字段中。

您不需要禁用保存按钮。检查表单的 ValidateChildren 方法就足够了,如果它返回 false,则意味着存在一些验证错误。要使用此方法,您应该记得在为控件设置错误时在控件的 Validating 事件中设置 e.Cancel = true

同时为了让用户在出现错误的情况下在控件之间移动,请在设计器中或使用代码将 FormAutoValidate 属性 设置为 EnableAllowFocusChange :

this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange;

验证码:

private void txtFirstname_Validating(object sender, CancelEventArgs e)
{
    if (string.IsNullOrEmpty(this.txtFirstname.Text))
    {
        this.errorProvider1.SetError(this.txtFirstname, "Some Error");
        e.Cancel = true;
    }
    else
    {
        this.errorProvider1.SetError(this.txtFirstname, null);
    }
}

private void btnSave_Click(object sender, EventArgs e)
{
    if (this.ValidateChildren())
    {
        //Here the form is in a valid state
        //Do what you need when the form is valid
    }
    else
    {
        //Show error summary
    }
}