错误提供者 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
。
同时为了让用户在出现错误的情况下在控件之间移动,请在设计器中或使用代码将 Form
的 AutoValidate
属性 设置为 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
}
}
我正在 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
。
同时为了让用户在出现错误的情况下在控件之间移动,请在设计器中或使用代码将 Form
的 AutoValidate
属性 设置为 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
}
}