C # winform, как текстовое поле стало нулевым при нажатии кнопки во второй раз? - PullRequest
3 голосов
/ 24 января 2011

В форме у меня есть группа Box, которая содержит вкладки управления с 4 вкладками.

Во второй вкладке у меня есть несколько текстовых полей, и перед сохранением данных мне нужно проверить ввод, введенный в эти текстовые поля. Обратите внимание, моя кнопка сохранения находится на последней вкладке.

Работает следующий тестовый сценарий:

  • Неверный ввод в первом текстовом поле
  • Неверный ввод во втором текстовом поле
  • Нажмите кнопку

Однако в следующем тестовом сценарии выдается исключение «Ссылка на объект, не установленная для экземпляра объекта»:

  • Неверный ввод в первом текстовом поле
  • Нажмите кнопку
  • Неверный ввод во втором текстовом поле
  • нажмите кнопку

Я установил точку останова, и она показывает, что конкретное текстовое поле пусто. Это происходит с каждым текстовым полем, где я нарушаю порядок.

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

Ниже мой код, который я запускаю при нажатии кнопки.

 private void btnOrderSave_Click(object sender, EventArgs e)
    {
        SaveOrder();

    }

    private void SaveOrder()
    {
        try
        {
            decimal? _marketRate, _bankcharges, _portcharges, _handlingcharges, _othercharges, _taxratio, _profitratio;

            if (!String.IsNullOrEmpty(txtUnitPrice.Text))
            {

                if (valCtr.IsDecimal(txtUnitPrice.Text))
                {
                    _marketRate = Convert.ToDecimal(txtUnitPrice.Text);
                }
                else
                {
                    ErrorMessage("Rate is invalid");                        
                    return;
                }
            }
            else
            {
                txtUnitPrice = null;
            }
            if (!String.IsNullOrEmpty(txtProfitRatio.Text))
            {
                if (valCtr.IsDecimal(txtProfitRatio.Text))
                {
                    _marketRate = Convert.ToDecimal(txtProfitRatio.Text);
                }
                else
                {
                    ErrorMessage("Profit ratio is invalid");                        
                    return;
                }
            }
            else
            {
                txtProfitRatio = null;
            }



        }

        catch (Exception ex)
        {
            AlertMessage(ex.InnerException + " :" + ex.Message + " : " + ex.StackTrace + " : " + ex.Source);

        }





    }

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Вы уверены, что хотите установить для самого текстового поля значение null, а не .Text или другого участника?

txtUnitPrice = null;

Назовите это догадкой, но сработает ли это лучше?

            txtUnitPrice.Text = null;
....
            txtProfitRatio.Text = null;
2 голосов
/ 24 января 2011

Проблема возникает из-за того, что вы устанавливаете для текстовых полей значение NULL.

else
{
    txtUnitPrice = null;
}

вместо этого вы должны установить свойство Text в String.Empty следующим образом:

else
{
    txtUnitPrice.Text = String.Empty;
}
...