2015-08-01 1 views
0

У меня есть серия текстовых полей в нескольких строках. Я хочу проверить, заполнены ли все текстовые поля или нет в строке, прежде чем переходить к следующей строке.окно с сообщением об ошибке появляется дважды за ту же ошибку

Я использую логику, когда фокус покидает последнее текстовое поле строки, проверьте, заполнены ли все текстовые поля или нет.

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)).

Пожалуйста, предложите, как я могу решить эту ошибку.

+4

** правильно * * способ обработки [ввода пользователем в winforms] (https://msdn.microsoft.com/en-us/library/ms229603 (v = vs.110) .aspx) - обрабатывать 'Validating' и' Validated' Мероприятия. –

ответ

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