我想用TextBoxes
验证多个Comboboxes
和MessageBox
。我已经做到了,但是现在的问题是,一旦我填写了Jtextbox3
和ComboBox1
,它就会忽略其他TextBoxes
和ComboBoxes
并转到下一个表格。
这是我的代码:
private void bunifuFlatButton1_Click(object sender, EventArgs e)
{
userform3 form3 = new userform3();
var jtextboxes = new[] { jTextBox3, jTextBox4, jTextBox5, jTextBox6, jTextBox7, jTextBox8, jTextBox9, jTextBox10, jTextBox11, jTextBox12, jTextBox13, jTextBox14, jTextBox15, };
var comboboxes = new[] { comboBox1, comboBox2, comboBox3, comboBox4, comboBox5, comboBox6 };
foreach (var jbox in jtextboxes)
{
foreach (var combo in comboboxes)
{
if (string.IsNullOrEmpty(jbox.TextValue) || combo.SelectedItem == null)
{
MetroFramework.MetroMessageBox.Show(this, "", "Please Enter All the Fields as Required", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
form3.Show();
this.Hide();
form3.Hide();
form3.ShowDialog();
this.Show();
}
break;
}
break;
}
}
This是表格。我已将TextBox
和ComboBox
标记为有问题。
答案 0 :(得分:1)
您仅检查第一个TextBox
和第一个ComboBox
。在两个break
循环的末尾都有一个foreach
语句,因此每个循环只会执行一次...换句话说,您只验证了jtextboxes
中的第一项和comboboxes
。
此外,编写内部循环的方式是,一旦遇到带有值的TextBox
和带有值的ComboBox
,隐藏/显示表单的代码将立即执行。另一种写法可能是:
private void bunifuFlatButton1_Click(object sender, EventArgs e)
{
userform3 form3 = new userform3();
var jtextboxes = new[] { jTextBox3, jTextBox4, jTextBox5, jTextBox6, jTextBox7, jTextBox8, jTextBox9, jTextBox10, jTextBox11, jTextBox12, jTextBox13, jTextBox14, jTextBox15, };
var comboboxes = new[] { comboBox1, comboBox2, comboBox3, comboBox4, comboBox5, comboBox6 };
if (jtextboxes.Any(tb => string.IsNullOrEmpty(tb.TextValue)) || comboboxes.Any(cb => cb.SelectedItem == null))
{
MetroFramework.MetroMessageBox.Show(this, "", "Please Enter All the Fields as Required", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
form3.Show();
this.Hide();
form3.Hide();
form3.ShowDialog();
this.Show();
}
}
如果TextBox
中的任何一个为空,或者ComboBox
中的任何一个没有选定的值,则会显示消息框。
答案 1 :(得分:0)
对于两个foreach循环,您似乎都在错误的位置出现了“中断”。中断意味着它将脱离循环。因此,在您的代码中,您将在Combobox1之后脱离内部foreach循环,然后在您的第一个文本框之后脱离外部foreach循环。删除那些,它应该可以正常工作