Состав событий элементов управления весьма разнообразен. Часто в обработчиках ряда событий элементов управления возникает необходимость использования модальных диалоговых окон. При этом не уделяется достаточного внимания к тому, на каком именно событии такое модальное диалоговое окно будет открыто и в каких ситуациях этот обработчик будет вызван.
Один из пример такой ситуации – отсутствие реакции на нажатие кнопки в форме с помощью мыши: активен один элемент управления, а мы мышью щелкаем по другому элементу управления (кнопке). При этом мы видим, что вместо реакции на нажатие кнопки у нас появляется некоторый модальный диалог. И даже после его закрытия требуется повторное нажатие на кнопку, чтобы вызвался обработчик события нажатия на кнопку.
Разберем описанную ситуацию на следующем примере. Пусть есть некоторая форма, в которой размещены элементы управления поле ввода и кнопка. У поля ввода есть обработчик события ПриИзменении():
Копировать в буфер обменаПроцедура ПолеВвода1ПриИзменении(Элемент) // Вставить содержимое обработчика. Предупреждение("ПолеВвода1ПриИзменении"); КонецПроцедуры
У кнопки – обработчик события Нажатие():
Копировать в буфер обменаПроцедура Кнопка1Нажатие(Элемент) // Вставить содержимое обработчика. Предупреждение("Кнопка1Нажатие"); КонецПроцедуры
Поставим курсор в поле ввода и введем некоторый текст. После этого с помощью мыши нажмем на кнопку: появится модальное диалоговое окно с сообщением "ПолеВвода1ПриИзменении", а нажатие на кнопку отработано не будет. Дело в том, что процедура нажатия на кнопку мышью фактически прервана появлением модального диалога. При нажатии мышью на кнопку форма в процессе активизации другого элемента управления (в данном случае - кнопки) отработает изменение данных в поле ввода, что приводит к вызову его обработчика события ПриИзменении(). Событие "Нажатие" возникает при отпускании левой кнопки мыши на элементе управления "Кнопка". В данном случае отпускание произойдет уже в появившемся модальном диалоге. В этом – причина того, что нажатие на элемент управления "Кнопка" не отрабатывается.
Во избежание такой ситуации нужно по возможности не использовать модальные диалоговые окна в обработчиках событий, которые могут вызываться при сходе с элемента управления.