TextBox和ComboBox验证无法按预期进行

时间:2019-07-10 13:16:20

标签: c# winforms validation combobox

我想用TextBoxes验证多个ComboboxesMessageBox。我已经做到了,但是现在的问题是,一旦我填写了Jtextbox3ComboBox1,它就会忽略其他TextBoxesComboBoxes并转到下一个表格。

这是我的代码:

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是表格。我已将TextBoxComboBox标记为有问题。

2 个答案:

答案 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循环。删除那些,它应该可以正常工作