同一错误出现两次错误消息框

本文关键字:错误 两次 消息 | 更新日期: 2023-09-27 18:06:03

我在多行中有一系列文本框。在移动到下一行之前,我想检查一行中是否填充了所有文本框。

我使用的逻辑是,当焦点离开行的最后一个文本框时,检查是否填充了所有的文本框。

ROW 1 >> txtP1 , txtQ1, txtR1, txtA1
ROW 2 >> txtP2 , txtQ2, txtR2, txtA2 // here txtA1, txtA2 are for decimal inputs
private void txtA2_Leave(object sender, EventArgs e)
        {
            Decimal amt2;
            if (!string.IsNullOrEmpty(txtA2.Text) || !string.IsNullOrWhiteSpace(txtA2.Text))
            {
                if (string.IsNullOrEmpty(txtP2.Text) || string.IsNullOrWhiteSpace(txtP2.Text)
                   || string.IsNullOrEmpty(txtQ2.Text) || string.IsNullOrWhiteSpace(txtQ2.Text)
                   || string.IsNullOrEmpty(txtR2.Text) || string.IsNullOrWhiteSpace(txtR2.Text))
                {
                    MessageBox.Show("please complete the line 2", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtP2.Focus();
                    txtA2.Text = "";
                }
                if ((!string.IsNullOrEmpty(txtP2.Text) || !string.IsNullOrWhiteSpace(txtP2.Text)) && Decimal.TryParse(txtA2.Text, out amt2))
                {
                    if (amt2 <= 0)
                    {
                        MessageBox.Show("Amount cannot be zero or negative", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtA2.Text = "";
                    }
                    totalAmt += amt2;
                    txtTotal.Text = totalAmt.ToString("#,###.00");
                }
            }
        }

当txtP2, txtQ2, txtR2为空并且txtA2不为空并且我尝试移动到下一行时,消息框出现两次。消息框出现后,控制流再次转到if (!string.IsNullOrEmpty(txtA2.Text) || !string.IsNullOrWhiteSpace(txtA2.Text))行,因此再次检查条件并再次出现消息框。

之后,控制流才进入第二个if条件if ((!string.IsNullOrEmpty(txtP2.Text) || !string.IsNullOrWhiteSpace(txtP2.Text)) && Decimal.TryParse(txtA2.Text, out amt2))

请建议我如何解决这个bug。

同一错误出现两次错误消息框

您可以在显示错误消息后返回:

if (string.IsNullOrEmpty(txtP2.Text) || string.IsNullOrWhiteSpace(txtP2.Text)
   || string.IsNullOrEmpty(txtQ2.Text) || string.IsNullOrWhiteSpace(txtQ2.Text)
   || string.IsNullOrEmpty(txtR2.Text) || string.IsNullOrWhiteSpace(txtR2.Text))
{
    MessageBox.Show("please complete the line 2", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    txtP2.Focus();
    txtA2.Text = "";
    return;
}

或者,如果您不希望执行其余的检查,也可以使用if else语句:

if (string.IsNullOrEmpty(txtP2.Text) || string.IsNullOrWhiteSpace(txtP2.Text)
   || string.IsNullOrEmpty(txtQ2.Text) || string.IsNullOrWhiteSpace(txtQ2.Text)
   || string.IsNullOrEmpty(txtR2.Text) || string.IsNullOrWhiteSpace(txtR2.Text))
{
    // ...
}
else if ((!string.IsNullOrEmpty(txtP2.Text) || !string.IsNullOrWhiteSpace(txtP2.Text)) && Decimal.TryParse(txtA2.Text, out amt2))
{
    // ...
}