Вы можете обрабатывать ошибки, которые происходят в объектах в run time, добавляя код обработки ошибок к обработчику событий Error объекта или определения класса. Если Вы хотите, чтобы объект имел свое собственное поведение обработки ошибок, добавьте код обработки ошибок к объектному событию Error . Поведение обработки ошибок, которое Вы определяете, относится тольлко к этому специфическому объекту.

Если Вы хотите чтобы все объекты, основанные на специфическом классе, использовали то же самое поведение обработки ошибок, добавьте код события Error в определение класса, например, в пользовательский класс или подкласс. Все объекты, производные от класса будут содержать одно и то же поведение обработки ошибок. Если класс или подкласс не содержат кода события Error , он наследует поведение обработки ошибок от родительского класса. Если кода ошибки Error не существует в родительском классе, Visual FoxPro ищет код события Error в другом классе иерархия классов. Вы можете также использовать команду NODEFAULT и функцию DODEFAULT( ) для отмены или вызова кода родительского класса. Для подробной информации, см. Отмена и Вызов Кода Родительского Класса .

Когда происходит ошибка в объекте в run time, Visual FoxPro ищет код события Error в объектном событии Error , событии базового класса Error , или в иерархии класса для этого объекта, и выполняет этот код, если он существует. Другие обработчики ошибок могут влиять на то, как Visual FoxPro обрабатывает ошибки. Для подробной информации, см. Приоритет Обработчика Ошибок .

Обработка ошибок Объектов в Контейнерах

Для объектов-членов созданных в пределах другого объекта или контейнера, например, контролов на форме, Вы можете определить обработку ошибок для каждого объекта-члена, добавляя код события Error для каждого объекта-члена. Однако, если кода события Error не существует для объекта-члена, он не наследуется из кода собылия Error контейнерного объекта автоматически. Если Вы хотите событие контейнерного объекта Error применить для обработки ошибок его членов, Вы можете передать сведения об ошибке из события члена Error в событие контейнера Error , используя следующий код в событии члена Error :

Скопировать код
LPARAMETERS nError, cMethod, nLine
THIS.Parent.Error(nError, cMethod, nLine)

Вы можете добавить код в событии контейнерного объекта Error , чтобы обработать сведения об ошибке переданные через параметры, указанные в этом коде.

Например, класс Видеомагнитофона в библиотеке примеров классов Visual FoxPro Buttons.vcx, расположенный в каталоге Visual FoxPro ...\Samples\Classes, основан на классе Visual FoxPro Container . Контейнер имеет четыре кнопки, которые управляют таблицей, перемещая указатель записи.

Однако, когда пользователь щелкает кнопкой и таблица рот этом не открыта, может произойти ошибка. Visual FoxPro пытается записать буферизированные значения в таблицу, когда перемещается указатель записи; поэтому, если допускается оптимистическая буферизация строки, и другой пользователь изменил значение в буферизированной записи, может также произойти ошибка.

Эти ошибки могут произойти, когда пользователь выбирает любую кнопку; поэтому, Вы не должны писать четыре отдельных подпрограммы обработки ошибок для каждой кнопки. Вместо этого, каждое событие кнопки Error содержит код, чтобы передать сведения об ошибке отдельной подпрограмме обработки ошибок в событии Error класса Видеомагнитофона.

Вы можете также включить другие обработчики ошибок, типа команд TRY...CATCH...FINALLY и ON ERROR в определениях класса и объектах. Для подробной информации о порядке и приоритете, в котором работают обработчики ошибок, см. Приоритет Обработчика Ошибок .

См. Также