Winforms Windows窗体中的验证
我正在开发一个Windows窗体应用程序,它有很多窗体,每个窗体都有几个控件。为了实施验证,我必须为每个控件实施“验证”事件,如下所示:Winforms Windows窗体中的验证,winforms,Winforms,我正在开发一个Windows窗体应用程序,它有很多窗体,每个窗体都有几个控件。为了实施验证,我必须为每个控件实施“验证”事件,如下所示: private void txtSalary_Validating(object sender, CancelEventArgs e) { if (txtSalary.Text.Trim() == String.Empty) { errorProvider1.SetError(txtSal
private void txtSalary_Validating(object sender, CancelEventArgs e)
{
if (txtSalary.Text.Trim() == String.Empty)
{
errorProvider1.SetError(txtSalary, "Salary is Required");
e.Cancel = true;
}
else
errorProvider1.SetError(txtSalary, "");
}
有没有什么方法可以让我做一些普通的事情?我是否可以通过代码以通用方式将事件与控件关联起来,而不是为每个控件(窗体设计视图-控件属性)声明性地定义“验证”事件?每个窗体只能使用一个事件,例如,您可以使用类似的方法
private void textboxValidation_Validating(object sender, CancelEventArgs e)
{
TextBox tb = sender as TextBox;
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
errorProvider1.SetError(tb, tb.Tag +" is Required");
e.Cancel = true;
}
else
errorProvider1.SetError(tb, "");
}
这可以用于表单中的所有文本框,您只需在其标记属性中添加每个文本框所需的内容
也可以对所有表单使用一个事件。查看您可以创建一个用于验证的分隔符方法,并在单击按钮时调用它,尝试以下操作:
private void SubmitButton_Click(object sender, EventArgs e)
{
if (ValidateControls()==0)
{
//Form is validated
}
}
int ValidateControls()
{
int flag = 0;
errorProvider1.Clear();
if (txtAge.Text.Trim() == String.Empty)
{
errorProvider1.SetError(txtAge, "Age is required");
flag = 1;
}
............................................
............................................
// validate all controls
............................................
............................................
if (txtSalary.Text.Trim() == String.Empty)
{
errorProvider1.SetError(txtSalary, "Salary is required");
flag = 1;
}
return flag;
}
如果您的所有输入都是相同的类型,并且您可以对每个输入执行相同的验证,并且您可以一致地命名控件,那么可以通过在表单的构造函数中添加类似以下代码的内容(初始化后)来扩展coolmine的答案:
谢谢但在哪里我可以关联所有控件的textboxValidation\u验证事件?此外,我希望使用Code将事件与所有控件挂钩,以编程方式将事件与TextBox关联,使用textBox1.Validating+=new CancelEventHandler(textboxValidation\u Validating);其中textBox1将是textbox的名称,而textboxValidation\u Validating应该是验证事件的名称。@kaus请查看我的答案,以了解对表单上的所有文本框控件自动执行此操作的方法(注释中的代码格式不正确)是否检查了我的答案?
foreach(Control c in Controls)
{
if(c is TextBox)
{
c.Tag = c.Name.Replace("txt","");
c.Validating += textboxValidation_Validating;
}
}