Получить текстовое поле, которое вызывает FormatException - PullRequest
0 голосов
/ 04 мая 2018

у меня есть этот код:

try 
{
    n1 = Convert.ToSingle(textBoxN1.Text); 
    n2 = Convert.ToSingle(textBoxN2.Text);
}
catch (FormatException e)
{
    MessageBoxShow("...");
}

можно ли в окне сообщений показать, какой текстовый блок вызывает исключение FormatException?

Edit: К сожалению, я должен сделать это с FormatException, потому что это часть домашней работы, где мы вынуждены использовать FormatException.

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Я предлагаю поставить float.TryParse в if:

if (!float.TryParse(textBoxN1.Text, out n1))
  MessageBoxShow("textBoxN1 has incorrect value");
else if (!float.TryParse(textBoxN2.Text, out n2))
  MessageBoxShow("textBoxN2 has incorrect value");
else {
  // Both textboxes are correct; n1 and n2 are parsed values
}

Редактировать: Если вам нужно использовать FormatException, давайте попробуем сделать наиболее удобным образом: давайте извлечем метод :

private static bool TextBoxToSingle(Control control, string message, out float result) {
  float result = float.NaN;

  try {
    result = Convert.ToSingle(control.Text);

    return true;
  }
  catch (FormatException) { // we don't want "e" here
    MessageBoxShow(message);

    return false; 
  }  
}

...

if (TextBoxToSingle(textBoxN1.Text, "textBoxN1 has incorrect value", out n1) && 
    TextBoxToSingle(textBoxN2.Text, "textBoxN2 has incorrect value", out n2)) {
  // Both textboxes are correct; n1 and n2 are parsed values
}
0 голосов
/ 04 мая 2018

Если вам нужно использовать подход try...catch, как вы прокомментировали (домашнее задание), то вы должны либо использовать два последовательных try...catch, и вы точно знаете, что не удалось, либо использовать это:

float n1 = Single.NaN; // or a different default value
float n2 = Single.NaN; // or a different default value

try
{
    n1 = Convert.ToSingle(textBoxN1.Text);
    n2 = Convert.ToSingle(textBoxN2.Text);
}
catch (FormatException e)
{
    TextBox errorBox = n1 == Single.NaN ? textBoxN1 : textBoxN2;
    MessageBoxShow("This TextBox caused a FormatException: " + errorBox.Name);
}
0 голосов
/ 04 мая 2018

Вы можете показать все трассировки стека на вашем MessageBox с помощью e.ToString(). Эта строка будет отображать, какая строка кода вызывает исключение. Попробуйте:

catch (FormatException e)
{
    MessageBoxShow(e.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...