Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

"End" ou comment fermer un programme...

9 réponses
Avatar
JyM
Salut au groupe
(Sous VB5).

J'ai un programme genre usine à gaz qui ouvre de nombreuses fenêtres.
Certaines de ce fenêtres ont un bouton "Quitter" , avec pour seul code
"End".
Je m'aperçois que après fermeture, mon programme tourne toujours.

Comment faire une fermeture propre et complète, qui libère la mémoire ???

Merci

9 réponses

Avatar
X
Bonjour,

Quand on termine le programme, form1
Sub Form_Unload(Cancel As Integer)
on error resume next
Unload formX
Unload formY
U... etc...
End
End Sub

Dans chaque feuille qui se ferme
Sub Form_Unload(Cancel As Integer)
Unload formOuOnEst
End Sub

Sinon, t'es-tu assuré que le programme ne lançait pas d'autre programme
(exe, com bat), ce qui serait un autre problème ???

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Pincipe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"JyM" a écrit dans le message de news:
43f56275$0$1150$
Salut au groupe
(Sous VB5).

J'ai un programme genre usine à gaz qui ouvre de nombreuses fenêtres.
Certaines de ce fenêtres ont un bouton "Quitter" , avec pour seul code
"End".
Je m'aperçois que après fermeture, mon programme tourne toujours.

Comment faire une fermeture propre et complète, qui libère la mémoire ???

Merci




Avatar
Jean-Marc
"JyM" a écrit dans le message de
news:43f56275$0$1150$
Salut au groupe
(Sous VB5).

J'ai un programme genre usine à gaz qui ouvre de nombreuses fenêtres.
Certaines de ce fenêtres ont un bouton "Quitter" , avec pour seul code
"End".
Je m'aperçois que après fermeture, mon programme tourne toujours.

Comment faire une fermeture propre et complète, qui libère la mémoire


???




Hello,

en général:
Unload me

Il faut aussi bien fermer les connections BDD, les
sockets si il y en a, s'assurer qu'on a pas un
appel API asynchrone en attente.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
X
Heu, précisions à titre personnel que je préfère nommer la feuille "formX"
que de mettre "Me", d'autant que ça ne marche que pour la feuille qui a le
focus, car "Me" n'est pas assez parlant...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"JyM" a écrit dans le message de news:
43f56275$0$1150$
Salut au groupe
(Sous VB5).

J'ai un programme genre usine à gaz qui ouvre de nombreuses fenêtres.
Certaines de ce fenêtres ont un bouton "Quitter" , avec pour seul code
"End".
Je m'aperçois que après fermeture, mon programme tourne toujours.

Comment faire une fermeture propre et complète, qui libère la mémoire ???

Merci




Avatar
Drizzit
Tout dépend comment fonctionne ton application, mais disons que si tu
est "standard", tu devrais avoir une fenêtre principale.

A ce moment là, tu peux faire la chose suivante :

Private Sub Form_Unload(Cancel As Integer)

Dim objForm as Form

For Each objForm in Form
If objForm.Name <> Me.Name Then
Unload objForm
End If
Next objForm

' Egalement il faut détruire tes instances d'objet que tu as créer
' bien que pas utile mais au moins c est propre
Set MonObjet = Nothing

End Sub
Avatar
Drizzit
Utiliser le nom de la fenêtre plutôt que "Me" est parfois dangereux.

Exemple tout bête :
- Créer un projet
- Ajouter deux fenêtres (Form1, Form2)
- Sur la Form1 ajouter un bouton avec comme source ci-dessous
Private Sub Command_Click()
Dim objForm As Form2
Set objForm = New Form2
objForm.Show
End Sub
- Sur la Form2 ajouter un bouton avec comme source ci-dessous
Private Sub Command_Click()
Unload Form2
End Sub

Le résultat :
Ta fenêtre Form2 ne se ferme pas....

Mais c'est un choix....
Avatar
Pascal B.
Salut,

Petite correction (voir le "s" à forms - pour la collection):


For Each objForm in Forms

au lieu de:

For Each objForm in Form

Amicalement
Pacal B.

"Drizzit" wrote in message news:
Tout dépend comment fonctionne ton application, mais disons que si tu
est "standard", tu devrais avoir une fenêtre principale.

A ce moment là, tu peux faire la chose suivante :

Private Sub Form_Unload(Cancel As Integer)

Dim objForm as Form

For Each objForm in Form
If objForm.Name <> Me.Name Then
Unload objForm
End If
Next objForm

' Egalement il faut détruire tes instances d'objet que tu as créer
' bien que pas utile mais au moins c est propre
Set MonObjet = Nothing

End Sub
Avatar
Drizzit
Merci pour cette correction... :o)
Avatar
Patrice Henrio
est-ce que cette procédure ne devrait pas être "récursive", c'est à dire
vérifier si dans les fenêtres filles il n'y aurait pas aussi d'autres
fenêtres à fermer ?

"Drizzit" a écrit dans le message de news:

Merci pour cette correction... :o)



Avatar
Fred
dans : news:
Patrice Henrio disait :
est-ce que cette procédure ne devrait pas être "récursive", c'est à
dire vérifier si dans les fenêtres filles il n'y aurait pas aussi
d'autres fenêtres à fermer ?




Bonjour Patrice,
Il n'est pas nécessaire qu'elle soit récursive car la propriété Forms
contient toutes les fenêtres (chargées) de l'application.
http://msdn.microsoft.com/library/en-us/vb98/html/vbproFormsProperty.asp

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT