我正在创建一个C#窗口应用程序,其中我采取了10个文本框。我想验证每个文本框意味着没有任何文本框应该是空白的。我已经使用errorprovider控件进行验证点击提交按钮。 该代码正常工作,但我想删除错误提供程序通知一旦我插入空白文本框中的值。如何可能请通过任何示例给我的代码。多个文本框的验证
在此先感谢。
我正在创建一个C#窗口应用程序,其中我采取了10个文本框。我想验证每个文本框意味着没有任何文本框应该是空白的。我已经使用errorprovider控件进行验证点击提交按钮。 该代码正常工作,但我想删除错误提供程序通知一旦我插入空白文本框中的值。如何可能请通过任何示例给我的代码。多个文本框的验证
在此先感谢。
根据您的实现,在文本框更改事件上,您可以调用您的文本框验证/验证事件处理程序,它将根据您在验证/验证处理程序中实现的任何逻辑设置或清除错误。
通常情况下,验证应该发生在焦点离开文本框时 - 您的验证事件是在这里被解雇吗?请参阅this MSDN documentation中的示例部分,了解如何结合使用验证和验证事件来获得此权限。
由于你有很多这样的文本框,我会建议你在里面创建自定义文本框控件封装验证逻辑。
正确的做法是为每个TextBox
控件处理Validating
event。对于您描述的场景,似乎没有任何理由使用Validating
和Validated
。
因此,维奈所暗示的,最好的事情将是封装这个代码到从继承的自定义控制内置TextBox
。覆盖自定义控件的OnValidating
method,并将您的验证逻辑置于/清除ErrorProvider
。然后将您的表单上的每个文本框控件替换为您的自定义类的实例,而不是内置的实例。
如果你真的想验证身份,只要在文本框中输入文本进行更新,你需要处理TextChanged
事件并调用你的验证代码来设置/清除ErrorProvider
。覆盖您的自定义控件中的OnTextChanged
method以执行此操作。
这是我使用的代码。你可以看到有2个处理程序,一个用于验证,另一个用于TextChanged事件。 DataTextBox在工具箱中显示为一个图标,因此您可以通过鼠标放置它,并且您还可以在属性窗口中设置canBeEmpty属性,默认值为true。
public class DataTextBox:TextBox
{
public DataTextBox()
{
this._errorProvider2 = new System.Windows.Forms.ErrorProvider();
//this.errorProvider1.BlinkRate = 1000;
this._errorProvider2.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
this.TextChanged+=new EventHandler(dtb_TextChanged);
this.Validating += new System.ComponentModel.CancelEventHandler(this.dtb_Validating);
}
private ErrorProvider _errorProvider2;
private Boolean _canBeEmpty=true;
public Boolean canBeEmpty
{
get { return (_canBeEmpty); }
set { _canBeEmpty = value; }
}
private void dtb_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
if ((this.Text.Trim().Length == 0) & !this.canBeEmpty)
{
_errorProvider2.SetError(this, "This field cannot be empty.");
e.Cancel = true;
}
else
{
_errorProvider2.SetError(this, "");
e.Cancel = false;
}
}
private void dtb_TextChanged(object sender, EventArgs e)
{
if (this.Text.Trim().Length != 0) _errorProvider2.SetError(this, "");
else _errorProvider2.SetError(this, "This field cannot be empty.");
}
}
}