【问题标题】:TextBox and ComboBox validation not working as intendedTextBox 和 ComboBox 验证未按预期工作
【发布时间】:2019-07-10 13:16:20
【问题描述】:

我想用MessageBox 验证多个TextBoxesComboboxes。我已经这样做了,但现在的问题是,一旦我填写了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

【问题讨论】:

  • 尝试在您的地铁消息框后返回
  • @Clint 没用 :(
  • 如 sr28 所述,这些休息是不必要的

标签: c# winforms validation combobox


【解决方案1】:

您只检查第一个TextBox 和第一个ComboBox。您在两个 foreach 循环的末尾都有一个 break 语句,因此每个循环只会执行一次......换句话说,您只会验证 jtextboxescomboboxes 中的第一项。

此外,内部循环的编写方式是,一旦您遇到带有值的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();
    }
}

如果任何TextBoxes 为空,或者如果任何ComboBoxes 没有选定的值,这将显示消息框。

【讨论】:

    【解决方案2】:

    看起来你在 foreach 循环中的“中断”位置都错误。 Break 表示它将跳出循环。所以在你的代码中,你在 Combobox1 之后打破了内部 foreach 循环,然后在你的第一个文本框之后打破了外部 foreach 。删除它们,它应该可以正常工作

    【讨论】:

    • 我刚刚删除了两个中断,没有什么不同
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多