我正在尝试进行验证,如果勾选了复选框,则相应的文本框将不再处于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模式
答案 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
在控件附近显示验证错误/图标来增强用户体验,请查看此帖子: