我正在尝试为我拥有的表单创建一些验证。表单上有两个文本框和两个单选按钮。我知道这个验证的逻辑目前有点生疏,所以任何建议都会很棒。 这是我到目前为止的代码:
开始按钮代码:
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;
}
总的来说,我觉得这可以以某种方式更加流线型,我相当坚持。
任何建议都会受到高度赞赏,因为我知道这是一个非常棒的问题。
答案 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.Validating
和Control.Validated
个活动。
因此,除非ValidateChildren
返回true
,否则您无需启动“开始”操作,即逻辑将变得微不足道。
P.S。您也可能不需要errors
变量作为类成员,因为您从验证函数返回它。为了显示错误,请通过在单独的组件中分离错误可视化来优先考虑"Tell, Don't Ask"的想法。