|
|
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
Привет всем. В программе у меня проблема с коллекцией Forms. В программе используются mdi-формы, и одну форму может вызвать другая форма, при этом родителем открытой форме будет открывашая ее форма. если же форма открыта обычным способом, то родителем будет главная mdi-форма. При выгрузке любой формы на событии _QueryUnload поставил код, который перебирает все формы из коллекции Forms и если родителем является закрываемая форма, то она выгружает и эту форму, т.е. "убирает за собой мусор". Если форму загрузила не главная форма, то явно указывается ее родитель, иначе по умолчанию 0. У всех форм есть public переменная lngParentFormhWnd, вот код к-ый стоит на QueryUnload у всех форм Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 1. Загружается форма A (Forms.Count=2 - главная mdi форма+форма A). 2. Затем из этой формы загружается форма B (соответственно родителем для формы B становится форма A). (Forms.Count=3 - главная mdi форма+форма A+форма B). 3. Далее форма B вызывает форму C (родитель форма B). (Forms.Count=4 - главная mdi форма+форма A+форма B+форма C) 4. При закрытии формы A, вызывается код на QueryUnload, который перебирает и соотвественно находит форму B, для которой родителем является и закрывает ее, обычным Unload. 5. И для формы B, тоже выполняется своя процедура QueryUnload, который тоже перебирает и находит форму C и выгружает эту форму. 6. При выполнении QueryUnload для формы C, никаких дочерних форм не находится и форма спокойно выгружается. 7. После выгрузки формы C. Forms.Count=3 - главная mdi-форма+форма A+форма B 7. Далее выгружается форма B. Forms.Count=3 - главная mdi-форма+форма A 8. Далее выгружается форма A. И здесь после выгрузки в коде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Никак не пойму, или в этом цикле в коллекции Forms осталась ссылка на форму C?! И при попытке обратиться к этой ссылке загружается форма C. Если да, то как обновить коллекцию? Requery, Refresh не работает Или где ошибка? Попробовал в каждой форме использовать Код: plaintext 1. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2007, 20:39 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
orunbekили в этом цикле в коллекции Forms осталась ссылка на форму C?! Другого варианта не вижу. Уверен, что если проверить TempForm.hwnd, то будет значение формы С. Однако предположений, почему она не выгружается до конца, нет. Внимательно посмотри, не остается ли в ней не убитых объектов. Попробуй создать проект, демонстрирующий этот глюк, посмотрим его все вместе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2007, 21:25 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
Вот проект демонстрирующий данный принцип и к-ый не выгружает форму C Вот процесс по которому выполняется код (лог): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 10:43 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
Только имя проекта измените с Forms на другой скажем FormsTest не то будет конфликтовать с коллекцией Forms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 11:40 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
Все проблема решена В каждой форме добавил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вот так вот всё нормально работает. Есть ли кто решал подобные задачи, и как решали эту проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 12:17 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
Да так и решали, только я не понял, почему с QueryUnload не работало, а с Unload работает. Может где-то Cancel ставился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 13:22 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
В событии Form_Unload переменные уже уничтожены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 13:50 |
|
||
|
Проблема с коллекцией открытых форм - Forms
|
|||
|---|---|---|---|
|
#18+
AntonariyДа так и решали, только я не понял, почему с QueryUnload не работало, а с Unload работает. Может где-то Cancel ставился? нет, я поменял Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 13:57 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34383699&tid=2164362]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 460ms |

| 0 / 0 |
