Первый проект. Обработка исключения

   
На этом шаге мы рассмотрим общие правила обработки исключений.

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

   
В простейшем случае инструкция обработки исключения в общем виде выглядит так:

  try
  {
    // Здесь инструкции, выполнение которых
    // может вызвать исключение
  }
  catch (ТипИсключения^ e)
  {
    // Здесь инструкции обработки исключения
  }

   
Ключевое слово try указывает, что далее следуют инструкции, при выполнении которых возможно возникновение исключений, и что
обработку этих исключений берет на себя программа. Слово catch обозначает начало секции обработки исключений. После слова catch указывается
ссылка на тип исключения, обработку которого берет на себя программа. Далее следуют инструкции, обеспечивающие обработку исключения.
Нужно обратить внимание на то, что инструкции секции try, следующие за той, при выполнении которой возникло исключение, после обработки исключения не выполняются.

   
В таблице 1 перечислены часто возникающие исключения и указаны причины, которые могут привести к их возникновению.

Таблица 1. Типичные исключения

ИсключениеВозникает
FormatException - ошибка формата (преобразования)При выполнении преобразования, если преобразуемая величина не может быть приведена к требуемому типу. Наиболее часто возникает при
преобразовании строки символов в число
IndexOutOfRangeException - выход значения индекса за допустимые границыПри обращении к несуществующему элементу массива
ArgumentOutOfRangeException - выход значения аргумента за допустимые границыПри обращении к несуществующему элементу данных, например, при выполнении операций со строками
OverflowException - переполнениеЕсли результат выполнения операции выходит за границы допустимого диапазона, а также при выполнении операции деления, если делитель равен нулю

   
В качестве примера обработки исключения в листинге ниже приведена функция обработки события Click, возникающего при щелчке на кнопке
Расчет окна программы "Доход". При возникновении исключения FormatException
программа определяет причину (какое из полей незаполнено или содержит неверные данные) и выводит соответствующее сообщение (рисунок 1).

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
	double sum; // сумма
	int period; // срок
	double percent; // процентная ставка
	double profit; // доход

	sum = 0;
	period = 0;
	try
	{
		sum = System::Convert::ToDouble(textBox1->Text);
		period = System::Convert::ToInt32(textBox2->Text);
		if (sum < 10000)
			percent = 8.5;
		else
			percent = 12;
		profit = sum * (percent/100/12) * period;
		label3->Text =
			"Процентная ставка: " + percent.ToString("n") + "%\n" +
			"Доход:" + profit.ToString("c");
	}
	catch (System::FormatException^ e)
	{
		if (sum == 0)
		{
			MessageBox::Show("Ошибка в исходных данных. \n
                                В поле Сумма надо ввести число.",
				"Доход",
				MessageBoxButtons::OK,
				MessageBoxIcon::Warning);
			textBox1->Focus();
		}
		else
		{
			MessageBox::Show("Ошибка в исходных данных. \n
                                В поле Срок надо ввести целое число.",
				"Доход",
				MessageBoxButtons::OK,
				MessageBoxIcon::Warning);
				textBox2->Focus();
		}
	}
}
};
}

Архив проекта можно взять здесь.


Рис.1. Пример сообщения об ошибке

   
В приведенной функции обработки события Click для вывода сообщения о неверных данных используется функция MessageBox::Show,
инструкция вызова которой в общем виде выглядит так:

 r = MessageBox::Show(Сообщение, Заголовок, Кнопки, 
         ТипСообщения, КнопкаПоУмолчанию) 

где:

  • Сообщение - текст сообщения;
  • Заголовок - текст в заголовке окна сообщения;
  • Кнопки - кнопки, отображаемые в окне сообщения (таблица 2);
  • Тип - тип сообщения. Сообщение может быть информационным, предупреждающим или сообщением об ошибке. Каждому типу
    сообщения соответствует значок (таблица 3);
  • КнопкаПоУмолчанию - порядковый номер кнопки, на которой находится фокус при появлении окна сообщения на экране (таблица 4).

   
Значение (тип System::Windows::Forms::DialogResult), возвращаемое функцией MessageBox::Show, позволяет определить, какая кнопка
была нажата пользователем для завершения диалога (таблица 5). Если в окне сообщения отображается одна кнопка (очевидно, что в этом случае не
нужно проверять, какую кнопку нажал пользователь), то функцию MessageBox::Show можно вызвать как процедуру.

Таблица 2. Идентификаторы кнопок

Значение параметраКнопки, отображаемые в окне сообщения
MessageBoxButtons::OKOK
MessageBoxButtons::YesNoYes, No (Да, Нет)
MessageBoxButtons::YesNoCancelYes, No, Cancel (Да, Нет, Отменить)

Таблица 3. Тип сообщения

СообщениеТип сообщенияЗначок
Warning - ВниманиеMessageBoxIcon::Warning
Error - ОшибкаMessageBoxIcon::Error
Information - ИнформацияMessageBoxIcon::Information

Таблица 4. Активная кнопка

Значение параметраНомер активной кнопки
System::Windows::Forms::MessageBoxDefaultButton::Button11
System::Windows::Forms::MessageBoxDefaultButton::Button22
System::Windows::Forms::MessageBoxDefaultButton::Button33

Таблица 5. Значения функции MessageBox::Show

ЗначениеНажата кнопка
System::Windows::Forms::DialogResult::YesYes (Да)
System::Windows::Forms::DialogResult::NoNo (Нет)
System::Windows::Forms::DialogResult::CancelCancel (Отмена)

   
На следующем шаге мы рассмотрим внесение изменений.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий