按钮点击winforms c#验证输入

时间:2014-01-14 13:36:02

标签: c# winforms

我在文本框中验证用户输入时遇到一个小问题。

有一个带有各种文本框的用户控件,用户可以在其中输入数据以向数据库添加新记录。当这些文本框中的任何一个没有正确的值(null或特定)时,我希望取消插入并让'errormaking'文本框获得焦点。

必须通过按钮检查。我可以调用按钮的验证事件,还是有不同的(更好的)方法来实现这个?

此外,还有取消按钮取消整个插入。当尝试使用errorprovider时,“取消”按钮也变得不可用,因为该字段为空,因此无法发送。

一些参考代码:

private void CheckInput(CancelEventArgs e, TextBox tb)
    {
        ErrorProvider error = new ErrorProvider();
        if (string.IsNullOrEmpty(tb.Text))
        {
            error.SetError(tb, "*");
            e.Cancel = true;
        }

        if (!string.IsNullOrEmpty(tb.Text)) 
        {
            error.SetError(tb, string.Empty);
            error.Clear();
            error.Dispose();
        }
    }

1 个答案:

答案 0 :(得分:5)

创建ErrorProvider的单个实例并将其放在表单上。在验证每个单独的控件时不要创建错误提供程序。然后订阅textbox Validating事件(您可以对所有文本框使用相同的处理程序):

private void textBox_Validating(object sender, CancelEventArgs e)
{
    TextBox tb = (TextBox)sender;

    if (String.IsNullOrEmpty(tb.Text))
    {
        errorProvider.SetError(tb, "*");
        e.Cancel = true; 
        return;          
    }

    errorProvider.SetError(tb, String.Empty);
}

为了避免在点击“取消”按钮时进行验证,请将其CauseValidation属性设置为false

更新:因此,您正在验证用户控件中的控件,您应该在单击取消时禁用该验证:

private void CancelButton_Click(object sender, EventArgs e)
{
    userControl.AutoValidate = AutoValidate.Disable;
    Close();
}