错误消息框出现两次相同的错误

时间:2015-08-01 07:39:02

标签: c# desktop-application

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

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

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 ((!string.IsNullOrEmpty(txtP2.Text) || !string.IsNullOrWhiteSpace(txtP2.Text)) && Decimal.TryParse(txtA2.Text, out amt2))

请建议我该如何解决这个错误。

1 个答案:

答案 0 :(得分:0)

您只需在显示错误消息后返回:

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 statements

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))
{
    // ...
}