Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Баг в сочетании Перехватчика, МенеджераСобытий и ТП (число прочтений - 2078 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Баг в сочетании Перехватчика, МенеджераСобытий и ТП
29. Августа 2012 :: 08:14
Печать  
Дано:

Форма.
В форме создан объект ТТабличноеПоле.ТЗ - табличное поле с поставщиком-ТЗ.
В форме создан объект ДопТЧ. Этот объект является перехватчиком событий формы.

В форме создан объект ПанельКнопок (на Актив-Х MSComctlLib.Toolbar). К перехвату не имеет никакого отношения, но для оповещения формы о нажатии кнопок панели используется МенеджерСобытий.

Волей случая обработчик событий панели кнопок имеет такое же имя, как и экспортный метод класса ДопТЧ.

Баг можно сформулировать так:
После вызова прямого редактирования значения в ячейке ТП начинается следующее: в ответ на оповещение формы о нажатии кнопки панели поток исполнения ВНЕЗАПНО приходит в класс ДопТЧ, где валится с ошибкой.

Судя по всему, МенеджерСобытий генерирует оповещения тем же способом, что и сама 1Ска генерирует свои стандартные события (или не тем же, но очень и очень похожим).
Как следствие, Перехватчик начинает искать обработчик этого события в классе-перехватчике, обнаруживает метод с таким же именем и отдает управление туда.
Однако, начинается эта котовасия только после того, как Табличное поле начнет редактировать значение - видимо, оно как-то немного ломает контекст формы.

Дополнительная информация:
1) ТТабличноеПоле.ТЗ сам является перехватчиком формы, но это не существенно - ибо баг есть даже если сделать так, чтоб ТТабличноеПоле.ТЗ не стояло в очереди перехвата событий формы.
1а) если изменить порядок инициализации классов так, чтоб "верхним" перехватчиком стал класс ТТабличноеПоле.ТЗ все перестает ломаться. Ибо у этого класса нет метода с таким же именем + нет обертки по передаче обработки этого "события" в перехватчик, инициализированный перед ним.


Тема скорее для того, чтоб вы не наступили в те же грабли. Ибо пока у меня возникла гипотеза о сути происходящего - я себе моск вывихнул (ибо ошибка сначала возникла в другом сочетании классов, в котором стало понятно, только что а) контекст ломается после редактирования значения и б) проблема в пересечении методов по именам).
Тестовый пример, если нужен, ХЗ когда сделаю - на днях сваливаю в отпуск на море %-)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать