Модальные диалоги в обработчиках событий элементов управления формы

Состав событий элементов управления весьма разнообразен. Часто в обработчиках ряда событий элементов управления возникает необходимость использования модальных диалоговых окон. При этом не уделяется достаточного внимания к тому, на каком именно событии такое модальное диалоговое окно будет открыто и в каких ситуациях этот обработчик будет вызван.

Один из пример такой ситуации – отсутствие реакции на нажатие кнопки в форме с помощью мыши: активен один элемент управления, а мы мышью щелкаем по другому элементу управления (кнопке). При этом мы видим, что вместо реакции на нажатие кнопки у нас появляется некоторый модальный диалог. И даже после его закрытия требуется повторное нажатие на кнопку, чтобы вызвался обработчик события нажатия на кнопку.

Разберем описанную ситуацию на следующем примере. Пусть есть некоторая форма, в которой размещены элементы управления поле ввода и кнопка. У поля ввода есть обработчик события ПриИзменении():

Копировать в буфер обмена
Процедура ПолеВвода1ПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    Предупреждение("ПолеВвода1ПриИзменении");
КонецПроцедуры 

У кнопки – обработчик события Нажатие():

Копировать в буфер обмена
Процедура Кнопка1Нажатие(Элемент)
    // Вставить содержимое обработчика.
    Предупреждение("Кнопка1Нажатие");
КонецПроцедуры

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

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