Спиране на програмата!

32 отговора 482 прегледа
в отговор на Щиpлиц #21

Re: Спиране на програмата!

Забравих да кажа...
За автоматичното унлоадване на всички форми...
Писах в Tips&Tricks код за промяна на шрифта на всички контроли във форма, той съдържа код, който може да направи това за всички форми в проекта - с леки модификации (премахване на кода установяващ шрифта на контролите и добавяне на ред "Unload objTarget") може да се превърне в All_Forms_Unload-er.
Лошото е ако твоя проект изисква точно определен ред на унлоадване на формите (например ако по този начин унлоаднеш Form5 после Form6, но при унлоадването си Form6 "пипне" нещо по Form5, която вече е унлоадната, последната ще се зареди отново и ще се появи проблема, който ти се е случил на теб с End).

Отговор
в отговор на Щиpлиц #22

Re: Спиране на програмата!

До колко знам - препорачаное от Майкрософт да се затварят
програмите на VB с "unload me" а не с End

И аз сам имал същия проблем.

Ако съм разбрал правилно в паметта остава заредена форма.

Ами ето това мисля че ще свърши работа.

Dim ctl As Form
' Премахване на всички форми
For Each ctl In Forms
If TypeOf ctl Is Form Then
Unload ctl
End If
Next

Може да се нагоди и да премахва определени форми.



Отговор
в отговор на Гeoprи #23

Re: Спиране на програмата!

Не е секретно, и никакъв проблем да ъплоад. Вече го направих даже, и ще ми е приятно да подискутираме за слабите места, стила и т.н. неща по програмирането.

Човек се учи от грешките си, но и от грешките на другите. Само с добри колеги можем да вдигаме нивото си на програмисти. Така че - критикувайте на воля. ;о)))))))

[линк]

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на Щиpлиц #24

Re: Спиране на програмата!

Значи, слушай сега.
Това което искаш да направиш наистина е решение, но не е добро.
По-добре е според мен щом една форма си свърши работата веднага да се премахне (ънлоудне), защото тя заема ресурс (памет), а не върши никаква работа.
Ти пишеш, че всичките ти допълнителни форми са модални, значи според мен най-добре е да си ги ънлоудваш веднага щом станат непотребни, т.е. да сложиш по едно Unload Me накрая в подпрограмите за бутоните OK и Cancel.
Така всички форми ще се ънлоудват на момента щом станат непотребни и ще се зареждат когото са необходими.
Това е най-добрият начин според мен. Дори мога да ти дам пример:
Стартирай нов проект, но не от тип Standart EXE, ами стартирай VB Application Wizard-а.
Необходимите промени, които трябва да направиш са:
1. На стъпката Interface Type да зададеш тип SDI
2. На стъпката Standart Forms да избереш Options Dialog и About Box
Другото го карай по подразбиране.

След като уизарда ти генерира проекта виж как е организирано зареждането и премахването на модалните форми за Options и About.

Надявам се това да ти помогне.

И използвайте го тоя Wizard, бе хора. Той не е само за начинаещи програмисти.

Бии, за да те уважават!
Отговор
в отговор на NaLamiataGlavata #25

Re: Спиране на програмата!

Идеално! Работи. И май вече няма значение колко са формите на проекта. ;о) ... 10хххххххххх

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на Пaлячo #26

Re: Аз имам

Мда, за това си прав. Навика не винаги е добро нещо. ;о)

Да си правя накрая на процедурата Error Handle си ми е навик. Но пък GoTo ми служи, за да съм сигурен, че Common инструкциите ще бъдат изпълнени. Понеже в тази процедура няма такива - наистина е по-добре да се съкрати максимално. Благодаря.

От друга страна ако процедурите се пишат максимално приличащи си една на друга - може да е по-лесно четенето на кода от този, който го е писал.

Постнал съм линка за пълния код на въпросната програма. Давайте коментари. Тук има още хора дето ще им е интересно да четат.

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на Гeoprи #27

Re: Спиране на програмата!

е,разбира се,че не са толкова.Въпросът бе по-скоро принципен.Но я си представи 178 пъти unload....ala-bala

Отговор
в отговор на Щиpлиц #28

Re: Спиране на програмата!

Само че не мога да тегля от data.bg ;))
Сега ще намеря някой който да ми го изтегли и да ми го прати ;))

Отговор
в отговор на Щиpлиц #29

Ето ти го проблема

Като се стартира frmMain, тя извиква StartSearch в което пък има ListRefresh frmDirectory.optDir.Path
С обръщението си към обект, който се намира в незаредена форма, формата се зарежда в паметта но не се показва на екрана. За да видиш какво точно става с кода ти, просто във frmDirectory_Load сложи един ред Me.Show за да ти се покаже формата в момента в който се зареди. После затвори главната форма от "X" бутона - frmDirectory ще си остане. (Когато си стартирал EXE файла).
Това го пробвах когато премахнат редовете които унлоадват формите една по една и сложих End на тяхно място.
Когато си бил в IDE на VB той ти е "Handle" End и ти е затварял всички форми, които са в проекта, а когато е в изпълним файл, явно се "Handle" от друг код , в който вероятно има някакво несъответствие - не се изпълнява така, както е в IDE. Може би мястото на End не е в Unload на форма :) Може би там не се изпълнява коректно End :)

Вече ще знаеш, че е добре формите да се унлоадват една по една :)

Отговор
в отговор на Гeoprи #30

Re: Ето ти го проблема

(След като си прочел предния ми пост)
Забележи, че като затвориш frmMain от "X" и като ти остане frmDirectory - можеш например да сменяш директорията и да максимизираш прозореца - обаче като минеш с мишката върху бутона и формата изчезва :))
Станна работа ;)

Отговор
в отговор на Гeoprи #31

Re: Ето ти го проблема

Да, прав си. Но не съм търсил основно къде се зарежда формата, а търсех разликата между "End" и "End". ;о))) Карай да върви. По-нагоре имаше инфо за това, че и М$ са си написали каква е разликата, но не съм знаел къде да прочета.

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на Щиpлиц #32

Re: Спиране на програмата!

mi spored men taka shte da e po dobre...
pa sha prai sushtoto ... i kato ima error niama da znaesh kakuv shte e :)

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next

Unload frmAbout
Unload frmDirectory
Unload frmDoubleFiles
Unload frmOptions

End Sub

Отговор
в отговор на Щиpлиц #33

Re: Спиране на програмата!

Този проблем и аз съм го имал. Мисля, че имаш не унищожени обекти в някоя от формите.

Отговор