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

Приведенные ниже разделы содержат более подробную информацию о трех последних соображениях.

События объекта в контейнерах

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

Это же соображение применимо и к элементам решетки (grid control). Решетка содержит колонки, которые содержат заголовки и элементы управления. Когда событие происходит для внутреннего объекта, то только именно этот объект, ассоциированным с этим событие и распознает это событие. Контейнер более верхнего уровня, каким в данном случае является колонка, не распознает это событие.

NoteЗамечание

Однако, исключение из этого правила существует. Если существует процедурный код, определенный для события грурры радиокнопок или группы командных кнопок, но у отдельных радиокнопок группы или у отдельных командных кнопок группы не кода, ассоциированного с событием, то при наступлении события для такой радио- или командной кнопки будет исполнен код, определенный для их групп.

События управляющих элементов из определенных пользователем классов

Когда событие происходит для элемента, основанного на классе, определенном пользователем, Visual FoxPro проверяет этот элемент на наличие процедурного кода для обработки события. Если код существует, Visual FoxPro выполнит его. В противном случае, однако, Visual FoxPro будет искать наличие процедурного кода вверх по иерархии класса. Если такой код будет найден Visual FoxPro исполнит его и прекратит поиск возможного кода в более высоких уровнях иерархии класса.

Соображения по последовательности событий

При определении - куда добавить код для события помните о приведенных ниже соображениях:

  • Событие Init формы наступает после всех событий Init для элементов, содержащихся в форме. Поэтому, вы можете включить код в событие Init формы для управления любыми элементами на форме до отображнения ее самой на экране.

  • Если вы желаете исполнить код, когда изменяется значение в list box, combo box или check box, введите требуемый код в событие InteractiveChange вместо события Click. Событие Click может и не наступить или может быть вызвано, даже если значение указанных элементов не изменялось.

  • Когда вы перетаскиваете элемент управления, все прочие события мыши приостановлены. Например, события MouseUp и MouseMove не наступают во время операции перетаскивания.

  • События Valid и When возвращают значение True (.T.) по умолчанию. Если код вернет False (.F.) или 0 в событии When, элемент управления не сможет получить фокус. Если код в событии Valid вернет False (.F.) или 0, фокус не может быть перемещен с этого элемента.

Смотрите также