Unload Me dans form Load

Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
- - Dernière réponse : Herve_be
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
- 19 nov. 2019 à 12:28
Bonjour,
J'effectue certains contrôles dans Form Load
si ce n'est pas correct j'envoie un message d'erreur puis Unload Me
j'obtiens évidemment une erreur 364 Form unloaded by itself sur le Exit Sub qui suit.

Comment puis-je m'unloader moi-même à partir de Form Load sans provoquer d'erreur ?
Afficher la suite 

15 réponses

Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
Bonjour

de mémoire c'est pas possible, il faut le faire dans un évènement qui suit le load.
Je n'ai pas codé en VB6 depuis très longtemps mais je dirais Shown ou un truc comme ça
Commenter la réponse de Whismeril
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
Merci pour ta réponse.
Je n'ai pas d'évènement après le Form Load
alors j'en ai créé un : un timer.
A la fin du Form Load je fais Timer.Enabled puis exit.
Quand le timer se déclenche il fait Unload Me.

Mais j'ai alors une autre erreur 400 : "Form already displayed; can't show modally"
J'appelle en effet la forme avec VBmodal pour qu'elle garde le contrôle jusqu'à ce qu'elle ait terminé
ce qui est bizarre c'est que j'ai l'erreur sur le statement qui l'appelle
voici le code de l'appel
120   Source = adresse du fichier source
130   Destination = URL destination
140   Upload.Show vbModal
...

"Upload" est le nom de la Form qui envoie le fichier source sur un serveur
"Source" et "Destination" sont définis comme Public dans un module .bas
Public Source As String
Public Destination As String

code de la Form Upload
Private Sub Form_Load()
' envoi du fichier vers le serveur
Timer.Enabled = True
Exit Sub

et la Sub Timer
Private Sub Timer_Timer()
Timer.Enabled = False
Me.Hide
Unload Me
End Sub

Tout fonctionne, le fichier est bien envoyé sur le serveur puis le timer est activé, il Unload alors sa Form
mais j'ai l'erreur 400 sur la ligne 140 Upload.Show vbModal !
Commenter la réponse de Herve_be
Messages postés
135
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
17 novembre 2019
2
0
Merci
Salut Hervé,
As-tu essayé de lancer ton programme par le biais de la sub main() sur un module?
Tu ouvres tes forms avec formload et tu fait un show sur la form principale.
La fermeture des forms ne te posera plus de problèmes, mais il te faudra clôturer toutes les forms dans le unload de la form principale.
Autre chose, il te sera impossible de clôturer une form principale avant une form modale. Faire un "unload load" avant dans ton timer.
Commenter la réponse de JeuDuTaquin
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
Je n'ai pas d'évènement après le Form Load

Toi p’tet pas, mais vb6 si...
http://www.wiki.robotz.com/index.php/Event_Sequences_in_Visual_Basic_VB6


Il faut utiliser Activate, seulement Activate sera régénéré à chaque fois que le formulaire repassera en premier plan.
Dans le load tu passe une variable booléenne (genre firstActivation) et dans le Activate si cette variable vaut true tu fais tes tests, tu passes la variable false et tu un load si besoin
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322 -
Shown en fait c’est en .Net, il a l’avantage de n’apparaitre qu’au premier affichage
https://docs.microsoft.com/en-us/dotnet/framework/winforms/order-of-events-in-windows-forms
Commenter la réponse de Whismeril
Messages postés
135
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
17 novembre 2019
2
0
Merci
Salut Hervé,
Effectivement, la fonction Unload n'est plus fonctionnelle.
Un frm.Hide fonctionne, mais pas "Unload Me".
D'ailleurs, le correcteur ne change pas "unload me" en "Unload Me".
Enfin sur ma machine.
Surement un problème de chargement de librairie, car on le trouve dans l'explorateur d'objet, et sur certains de mes projets, cela fonctionne.
Donc, regarde les "références" et les "Composants" que tu utilises… c'est sûrement un doublon dans la définition ou un nom de sub identique.
Commenter la réponse de JeuDuTaquin
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
Merci pour vos réponses,
J'avais compris qu'il suffisait de déplacer le code dans Form Activate mais il ne passe pas par là : la Form est bien visible mais le code dans Form Activate n'est pas exécuté.

Chez moi "unload me" se capitalise bien en "Unload Me".

Je ne comprends toujours pas pourquoi quand le Timer fait Unload Me
j'obtiens une erreur 400 dans Upload.Show vbModal
càd dans le statement qui appelle initialement la Form
Commenter la réponse de Herve_be
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
Bonjour
la Form est bien visible mais le code dans Form Activate n'est pas exécuté.

Ha pourtant je l’ai utilisé de nombreuses fois, mais p’tet pas en modal.

Je ne comprends toujours pas pourquoi quand le Timer fait Unload Me
j'obtiens une erreur 400 dans Upload.Show vbModal
càd dans le statement qui appelle initialement la Form

Peut-être que la ligne qui appelle ce formulaire n’a pas encore été avertie que l’initialisation était terminée si le délai du timer est trop court.

Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322 -
Ps un hide suivit d’un unload, je pense que c’est pas nécessaire, tu peux faire unload directement
Commenter la réponse de Whismeril
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
La Fom Upload envoie un fichier sur le serveur avec Wininet.
Elle comporte 2 boucles "Still executing" / Doevents
Le timer est d'une seconde.
Il m'étonnerait que l'appelant n'ait pas encore été averti.

Peut-être serait-il plus efficace que je vous explique ce que je veux faire.
Mon programme comporte plusieurs Forms.
Chacune peut envoyer un fichier sur Internet => routine commune
Cette routine a besoin de l'objet Inet => la routine est donc dans un Form qui comprend cet objet et qui s'appelle "Upload"
pour demander un upload d'un fichier je mets donc l'adresse local du fichier et son URL destination dans 2 variables publiques et j'appelle la routine qui télécharge le fichier puis Unload Me
tout ceci fonctionne très bien.

Le petit défaut est que l'utilisateur peut arrêter le programme avant que le fichier soit complètement envoyé, d'où l'idée d'appeler la forme en Modal pour qu'on ne puisse pas l'arrêter avant qu'elle soit terminée et ça fonctionne très bien aussi
sauf que j'ai une erreur 400 sur la ligne qui invoque la Form
Upload.Show vbModal
si je supprime VbModal ça fonctionne très bien.

Si vous avez une autre idée pour faire ça ...
Commenter la réponse de Herve_be
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
Oui, tu empêches la fermeture de la fenêtre et du logiciel tant que c'est pas finit, dans les évènement de fermeture. (QueryUnload)
Commenter la réponse de Whismeril
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
Bonjour,
Pas de problème pour empêcher la fermeture de la fenêtre dans Querry Unload,
mais je ne vois pas comment je pourrais éviter de fermer ou surtout de continuer à travailler dans les autres fenêtres, ce qui est le but de vbModal.

Je ne comprends toujours pas cette erreur 400, rappel
- j'invoque une Form qui s'appelle "Upload" par Upload.Show vbModal
- cette Form devrait s'arrêter toute seule mais elle comporte qu'une seule sub Form_Load dans laquelle je ne peux pas faire Unload Me
- alors à la fin de Form_Load je démarre un timer puis exit sub
- quand le timer est déclenché il fait Unload Me
tout fonctionne bien sauf que j'ai une erreur 400 sur Upload.Show vbModal
"Form already displayed; can't show modally" !
Commenter la réponse de Herve_be
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
Si l’événement Activate ne se produit pas, as tu essayé les 2 suivants ?
A savoir le got focus du 1 er control et le paint du formulaire?
Commenter la réponse de Whismeril
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
Gor_Focus ne se produit pas non plus.
Paint est bien activé mais il est de nouveau activé chaque fois que j'écris qqch sur une TextBox de la Form.
De toute façon ceci n'explique pas pourquoi j'ai une erreur 400 (Form already displayed; can't show modally) sur Upload.Show vbModal après que cette Form ait été exécutée.
Commenter la réponse de Herve_be
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
J'ai trouvé !
Dans Form Load je fais Me.Show.
Ce qui est bizarre est que l'erreur 400 ne se produit pas à ce moment.
Toujours est-il que si je supprime Me.Show ça fonctionne.

Par contre on ne voit pas la Form !
Commenter la réponse de Herve_be
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 décembre 2019
322
0
Merci
T’as pas laissé trainé un me.Hide quelque part?
Commenter la réponse de Whismeril
Messages postés
569
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
28 novembre 2019
2
0
Merci
Non, je ne trouve aucun Hide.
Commenter la réponse de Herve_be