Aphex Twin
Messages postés27Date d'inscriptionjeudi 29 janvier 2004StatutMembreDernière intervention 8 mai 2009
-
29 août 2006 à 17:57
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
30 août 2006 à 00:23
Bonjour, j'ai un petit soucis avec un programme. Le programme en lui même fonctionne comme il faut mais je remarque malgré tout quelque chose d'anormal. Lorsque je ferme le programme, il se ferme correctement, il dissparait aussi bien de l'écran que dans la barre des tâches... mais en ouvrant mon Gestionnaire des tâches, je remarque que le programme est toujours présent. (le nom du programme, avec son icone, et "En cours d'exécussion" dans la colonne à coté) A quoi est-ce dû? Et comment puis-je résoudre cette anomalie?
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 29 août 2006 à 18:04
salut,
tu as pu fermer avec des Me.hide
il peux y avoir d'autres form (ou objets comme le dit JRivet) en cours d'utilisation
tu peux avoir un timer à petit intervalle en cours de fonctionnement
ou boucle....
etc.....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Aphex Twin
Messages postés27Date d'inscriptionjeudi 29 janvier 2004StatutMembreDernière intervention 8 mai 2009 29 août 2006 à 18:07
Quels objets seraient suceptible de ne pas être déchargé? Mon programme est composé de plusieurs feuilles mais l'instruction "Unload Me" est toujours appelé lors de la fermeture de n'importe laquelle d'entres elles. J'ai également une base de donnée Access qui est ouverte à une certaine partie de mon programme mais lors de la fermeture de la feuille, je fais pourtant un "Titres.Close" (la table), un "BD.Close", (la base de donnée)", puis un "Unload Me".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Aphex Twin
Messages postés27Date d'inscriptionjeudi 29 janvier 2004StatutMembreDernière intervention 8 mai 2009 29 août 2006 à 18:29
Il y'a aussi un timer dans mon programme mais il se trouve sur une autre feuille et parametré par défaut en "Enabled = False". Le probleme survient même sans appeler cette feuille dans laquelle se trouve le timer. (par sécurité je viens d'ajouter un "Timer.Enabled = False" dans le "Unload" de la feuille dans laquelle il se trouve, pour m'assurer qu'il ne continue pas.)
Par contre, j'appel peut-etre mes autres fenêtes de la mauvaise maniere. Mon programme est composé de 4 feuilles (FormMain, Invitation, Localisation, About) et elles sont appelées de la maniere suivante:
1) Load Invitation
Invitation.Show vbModal
2) Localisation.Show
If Localisation.WindowState = vbMinimized Then
Localisation.WindowState = vbNormal
End If
Localisation.SetFocus
3) About.Show vbModal
Et elles sont toutes refermée par un Unload Me. Est-ce suffisant?
Aphex Twin
Messages postés27Date d'inscriptionjeudi 29 janvier 2004StatutMembreDernière intervention 8 mai 2009 29 août 2006 à 18:54
Est-ce que cela peut être du à des variables que je définis sur base d'objets ou variables publiques se trouvant sur d'autres feuilles?
Du genre, dans ma feuille FormMain, si je met "If About.Visible = False Then" (et ce meme sans jamais appeler la feuille "About" pendant l'exécution du programme) est-ce que ca pourrait provoquer le probleme?
Aphex Twin
Messages postés27Date d'inscriptionjeudi 29 janvier 2004StatutMembreDernière intervention 8 mai 2009 29 août 2006 à 19:09
Aaah, d'accord.. je viens de tester en enlevant cette vérification du "If About.visible = false then" et en effet le processus n'est plus en cours d'exécution quand je quitte le programme.
C'est donc ca... Merci beaucoup!
Malheureusement, il me faut maintenant trouver une solution alternative pour remplacer mon test (If .visible = false) et je ne sais pas comment faire.. En fait, appeler un SetFocus sur une textbox lorsqu'un évenement survient dans la FormMain.. mais il arrive que l'évenement survienne pendant que je suis dans une autre feuille modale, comme "About".. et j'aimerai qu'il ne fasse pas de SetFocus tant que je suis dans une autre fenêtre modale de mon programme.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 29 août 2006 à 19:11
Bonsoir,
pour la base Access, il y a surement plusieurs "set" (Db et Rs), donc,
en fin, il faut autant de suppression.
D'une manière générale, tous les set créés doivent être supprimés.
Set Db = Nothing
Set Rs = Nothing
jean-marc
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 29 août 2006 à 19:26
salut JMO,
en effet, je n'ai pas mis le RS (puisque nommé Titles), "en autres" puisque je supposais que les objets étaient multiples (plus de 2)
Aphex,
juste les fermer est suffisant sur le principe pour un utilitaire, mais autant prendre l'habitude de décharger tous tes objets.
et une solution alternative au .visible?
et hop, un snippetde plus
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 30 août 2006 à 00:23
Salut,
En principe, pour quitter un programme de façon "sécuritaire" il faut
fermer chaque objet du programme et de les mettre à Nothing. Par objet,
je pense à toutes sortes de choses qui utilisent SET
De plus, tu dois fermer le ou les Timers et fermer toutes les Forms.
Si tu appliques cela à tous tes programmes, tu ne devrais plus avoir de problèmes.
Donc, dans le Form_Unload de la Form principale, si tu utilises des Recordsets, BD...
If (Rs Is Nothing) False Then Set Rs Nothing (après un .Close si c'est pas déjà fait)