验证逻辑

时间:2014-08-24 04:15:20

标签: c# winforms validation

我正在尝试为我拥有的表单创建一些验证。表单上有两个文本框和两个单选按钮。我知道这个验证的逻辑目前有点生疏,所以任何建议都会很棒。 这是我到目前为止的代码:

  • 请记住,int错误是类
  • 中的公共变量

开始按钮代码:

private void btnStart_Click(object sender, EventArgs e)
{
        errors = validateForm();

        //Here I want the user to be able to fix any errors  where I am little 
        stuck on that logic at the moment 

        //validate the form
        while (errors > 0)
        {
            validateForm();
            errors = validateForm();
        }
 }

ValidateForm方法:

 private int validateForm()
    {
        errors = 0; 

        //check the form if there are any unentered values
        if (txtDest.Text == "")
        {
            errors++;
        }
        if (txtExt.Text == "")
        {
            errors++;   
        }
        if (validateRadioBtns() == true)
        {
            errors++;
        }

        return errors;

    }

ValidateRadioBtns方法:

private Boolean validateRadioBtns()
    {
        //flag - false: selected, true: none selected
        Boolean blnFlag = false;

        //both of the radio buttons are unchecked
        if (radAll.Checked == false && radOther.Checked == false)
        {
            blnFlag = true;
        }
        //check if there is a value entered in the text box if other is checked
        else if(radOther.Checked == true && txtExt.Text == "")
        {
            blnFlag = true;
        }

        return blnFlag;
    }

总的来说,我觉得这可以以某种方式更加流线型,我相当坚持。

任何建议都会受到高度赞赏,因为我知道这是一个非常棒的问题。

2 个答案:

答案 0 :(得分:1)

首先,因为您已经说过要验证未输入的值,您是否将空格视为条目?因为有人可以按空格键,然后你的验证就会通过。

除此之外,你可能想要指出他们没有填写哪个文本框或者他们没有点击哪个组,看起来你正在使用网络表单,所以这里是演练http://msdn.microsoft.com/en-us/library/vstudio/a0z2h4sw(v=vs.100).aspx

如果您使用的是Windows表单,则可以使用此演练http://msdn.microsoft.com/en-us/library/ms229603(v=vs.110).aspx

如果你需要保留现有逻辑,我建议将重复逻辑提取到单独的函数中,并且临时btnFlag也不是必需的,因为你可以返回true并在结尾返回false。

private Boolean validateRadioBtns()
{
    if (radAll.Checked == false && radOther.Checked == false)
        return true;
    else if(radOther.Checked == true && txtExt.Text.Trim().Length == 0 ) //just a quick sample of how you can trim the spaces and check for length 
        return true;
    return false;
}

答案 1 :(得分:1)

有关验证模式,请参阅documentation。您已选择显式验证策略,您可以使用ContainerControl.ValidateChildren方法并执行“开始”操作。

Windows窗体具有专门的验证事件,允许您对每个控件做出相应的响应。您将使用Control.ValidatingControl.Validated个活动。

因此,除非ValidateChildren返回true,否则您无需启动“开始”操作,即逻辑将变得微不足道。

P.S。您也可能不需要errors变量作为类成员,因为您从验证函数返回它。为了显示错误,请通过在单独的组件中分离错误可视化来优先考虑"Tell, Don't Ask"的想法。