我有多行的文本框系列。我想在移动到下一行之前检查是否所有文本框都已填充。
我正在使用逻辑,因为当焦点离开行的最后一个文本框时,检查是否所有文本框都已填充。
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))
。
请建议我该如何解决这个错误。
答案 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))
{
// ...
}