如果已选中复选框,则验证文本框内容

时间:2017-10-15 14:00:13

标签: c# .net winforms validation

我正在尝试进行验证,如果勾选了复选框,则相应的文本框将不再处于ReadOnly模式且不应为空。例如,如果我选中CheckBox1,如果TextBox1没有任何输入,则会弹出MessageBox表示"请填写整个表单! " 。否则,它会显示"完成!"

这是我到目前为止所做的:

if ((CheckBox1.Checked && TextBox1.Text == "") 
    || (CheckBox2.Checked && TextBox2.Text == ""))
    MessageBox.Show("Please fill up the entire form!");

else if (CheckBox1.Checked && TextBox1.Text != "")
    MessageBox.Show("Done!");

else if (CheckBox2.Checked && TextBox2.Text != "")
    MessageBox.Show("Done!");

我已经制作了几个需要验证的复选框/文本框,我发现它有点冗长,所以我想知道是否有更简单/更好的方法。

(不确定是否相关)注意:当部分关闭触发CheckChanged事件时,我切换了ReadOnly模式

1 个答案:

答案 0 :(得分:1)

您的代码可能会有一些增强功能,例如:

  • 您可以使用此条件!textBox.ReadOnly && string.IsNullOrEmpty(textBox.Text)而不是您拥有的条件。
  • 如果存在验证错误并且只是将代码放在验证块之后,您可以避免使用方法中的else if部分和return

更好的解决方案 - 使用Validating活动

但我宁愿改变整个验证方式,并使用Validating控件的TextBox事件。为此,您需要按照以下说明操作:

1)在设计模式下将表单的AutoValidate属性设置为EnableAllowFocusChange,或者使用表单的Load事件中的代码。

2)使用单一方法处理所有Validating控件的TextBox事件,并在出现验证错误时设置e.Cancel = true;

private void textBox_Validating(object sender, CancelEventArgs e)
{
    var textBox = (TextBox)sender;
    if (!textBox.ReadOnly && string.IsNullOrEmpty(textBox.Text))
        e.Cancel = true;
}

3)在表单的保存按钮中,使用表单的ValidateChildren方法,检查是否有任何验证错误,显示消息,否则执行按钮应该执行的操作:

private void button1_Click(object sender, EventArgs e)
{
    if (!this.ValidateChildren())
        MessageBox.Show("Please correct validation errors.")
    else
        MessageBox.Show("Done!")
}

注意

要阅读有关Windows窗体中验证选项的更多信息,请查看以下文章:

此外,如果您想通过使用ErrorProvider在控件附近显示验证错误/图标来增强用户体验,请查看此帖子: