同一错误出现两次错误消息框
本文关键字:错误 两次 消息 | 更新日期: 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))
{
// ...
}