
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.07.2003, 16:12
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
Объясните ход мыслей Акса, пожалуйста, в следующей ситуации: ГлавнаяФорма динамически подключает к себе (к контролу SubForm) подчиненную форму, которая в свою очередь подключает себя к источнику данных через задание RecordSourse = "Some SQL String". В каком событии (OnOpen или OnLoad) правильней размещать команду подключения формы к данным? В OnOpen форма просто открыта, но еще не загружена. Если подключить источник, то Аксес будет "насильно" вызывать загрузку формы, выполнять операцию подключения источника данных и затем возвращать управление опять в обработчик OnOpen. Т.е. события происходят шиворот-навыворот: еще не закончилось событие на открытие, как уже произойдет событие загрузки и т.п. Более правильным решением является подключение источника в событии OnLoad, когда форма уже открыта и загружена, при этом ход выполняемых действий (а значит и появляющихся событий) происходит "так как надо", без всяких забеганий вперед. Но... Но если в "неправильном" случае все происходит "неправильно" и при этом возникает ОДНО событие Current, то в "правильном" случае этих событий ДВА! Объясните пожалуйста, почему так и где всё ж таки лучше подключать форму к источнику данных. Буду рад любым соображениям! Спасибо! З.ы. результаты тестов обоих вариантов, где содержание строки это: Событие (действие) = время в мс: Период_с_пошлого_пункта/Период_с_начала_теста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 18:48
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
Немного не в тему, но по подформам. если есть две подформы , или больше, какая последовательность их обработки аксом при открытияя основной формы? теперь по теме а как у тебя связаны между собо основная и подформа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 20:14
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
>если есть две подформы , или больше, какая последовательность их обработки аксом при открытияя основной формы? Open_ПодForm_КотораяПерваяПоZ-порядку Open_ПодForm_КотораяВтораяПоZ-порядку Open_ГлавнаяForm Это если они присоеденины в конструкторе, а если присоединяешь динамически как делал я (см ниже), то сначала главная, а затем в порядке подсоединения к контролам все подчиненные. >а как у тебя связаны между собо основная и подформа? Вадя, это вообщем-то тесты, фундаментальные исследования, так сказать. Связаны они следующим образом: Главная форма в которой Список (с перечнем форм, которые я могу подсоединить к главной), контрол SubForm, который в момент открытия главной пуст (ни одна подчиненная к нему не подсоединена). После выбора подчиненной формы в списке она подсоединяется к контролу SubForm... Типа так: Код: plaintext 1. 2. 3. 4. 5. Я просто не могу догнать, почему в одном случае один раз "текущая запись", а во втором два. А хотелось бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 20:18
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
В смысле строки Call OptimProfilerWriteLog("ПрисоединениеФормы") отношения к делу не имеют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 20:53
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
вариант ответа: событие текущая запись возникает после Resize в первом случае форма загружается уже с источником данных ( самими данными) т.е. все указатели (типа bookmark) уже установлены. при наступлении Resize происходит пересчет формы и соответсвенно соб. текущая запись. во втором случае - соответствено по другому сначала на загрузку данных, потом на Resize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 21:38
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
Сам по себе Ресайз к возникновению события Куррент не приводит. Я имею в виду уже после того как форма открыта и работает. Кажется так: Акс считает обязанным сгенерить Куррент во время открытия формы по двум причинам: 1. Куррент - неотъемлемая часть открытия формы и Акс обязан сгенерить при открытии формы следующие события: Open > Load > Resize > Current, о чем свидетельствует Help (When you first open a form, the following events occur in this order) Эти события происходят даже если форма вообще без источника данных остается на протяжении всей работы. 2. Когда появился источник записей - для того, чтобы сообщить, что вообще что-то появилось, и курсор установлен на запись. Ну конечно!!! Блин... В первом случае у нас фактически получается порядок событий такой, какой он и должен быть: Событие Открытие, которое насильно заставляет акс выполнять все прочие действия: Загрузка, Ресайз, Текущая! В итоге получаем нужную последовательность событий! А во втором случае у нас возникает событие Загрузка (форма уже загружена и Аксу можно действовать в обычном порядке) в котором мы подключаем данные. На подключение данных Акс реагирует Куррентом (см пункт 2), но нарушается требуемый порядок следования событий - Куррент опережает Ресайз. Поэтому, чтобы соответствовать порядку следования событий Акс и после Ресайза генерит Куррент! Всё! Вопрос снят :) ВСЕМ :) огромное спасибо! //подмигивает Ваде ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 21:46
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
2НУФ-НУФ я считаю нада сформулировать покрасивее и по понятнее и наблюдение поместить куда надо. это для более продвинутых юзеров. у меня подобный вопрос возникал но где-то на подсознании. теперь многие действия акса из прошлых задач стали более понятны . грамотное подключение ускоряет работу , особенно когда на карент нагружено много действий. и тебе спасибо!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.07.2003, 22:43
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
Вадя, да не... Я кое-как в качестве исполнителя вроде ясную тему еле-еле дотянул (я про FAQ), а здесь вообще завал! Надо будет объяснять что такое "насильная" загрузка формы... Хотя, можно передрать с Гетца :) В большинстве случаев всё это не важно, но иногда встречаются ситуации, в которых тебе надо четко знать в какой последовательности и по каким причинам генерятся события во время открытия формы. Более того, можно управлять их появлением! Я имею в виду следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Если последовательность событий важна, то это очень полезная информация (как для меня в данном случае), а если форма строится со вкусом (т.е. просто), то разницы никакой - так, баловство одно :) Более того, кажется возможно и еще большее количество вариантов, но мне уже и этого вполне достаточно. Усё... Пошел применять на практике :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.04.2004, 15:04
|
|||
|---|---|---|---|
|
|||
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
Первоначально инициализация источника была на Load, но понадобилось избавиться от второго Current. Поставил инициализацию на Open, но возник глюк: листвью, находящийся в правом нижнем углу формы почему-то отображался в левом верхнем, а после первого перехода к другой записи прыгал на место. "Правильным" вариантом, как ни странно, оказалась инициализация источника на GotFocus... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.04.2004, 19:44
|
|||
|---|---|---|---|
Исследование: При открытии формы Current возникает дважды. Почему? |
|||
|
#18+
> Поставил инициализацию на Open, но возник глюк: листвью, находящийся в правом нижнем углу формы почему-то отображался в левом верхнем, а после первого перехода к другой записи прыгал на место. С актив-иксами в Аксе всегда так - то не ресайзятся (ХТМЛ-вийвер), то мусор всякий упорно помнят (Тривью), то еще что-нибудь... В данном случае такое, видимо, происходит как раз из-за "насильного" нарушения последовательности следования событий, т.е. событие Опен насильно инициирует все прочие действия и события, которые происходят после возникновения "ОнОпен", но до выхода из кода обработчика этого события. Т.е. форма как бы открыта номинально, но еще не загружена, при этом актив-икс, как чужеродное существо пытается "сесть" в еще не загруженную форму... ...Блин... Как собачка - понимаю, а сказать не могу :) Много времени прошло... много... >"Правильным" вариантом, как ни странно, оказалась инициализация источника на GotFocus... Ну не знаю... Это при каждом получении фокуса происходит инициализация источника? Или есть какая-либо проверка на необходимость инициализации? В любом случае, на мой взгляд лучшим решением является подключение источника данных в "Опен", где кроме этого необходимо спозиционировать актив-икс на его законное место. Хотя... случаи бывают разные :) З.Ы. Сорри за, вобщем-то, ненужный пост... Ностальгия, однако :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=45&mobile=1&tid=1674878]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 441ms |

| 0 / 0 |
