Unload Me dans form Load

Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 14 nov. 2019 à 14:35
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 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 ?

15 réponses

Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
14 nov. 2019 à 17:18
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
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
14 nov. 2019 à 17:37
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 !
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
14 nov. 2019 à 17:57
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.
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
Modifié le 14 nov. 2019 à 18:07
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
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
14 nov. 2019 à 18:10
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
14 nov. 2019 à 19:44
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.
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
15 nov. 2019 à 12:03
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
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
15 nov. 2019 à 13:34
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.

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
15 nov. 2019 à 13:34
Ps un hide suivit d’un unload, je pense que c’est pas nécessaire, tu peux faire unload directement
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 15 nov. 2019 à 16:39
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 ...
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
15 nov. 2019 à 17:25
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)
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 18 nov. 2019 à 16:33
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" !
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
18 nov. 2019 à 18:24
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?
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
19 nov. 2019 à 10:11
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.
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 19 nov. 2019 à 10:42
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 !
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
19 nov. 2019 à 10:56
T’as pas laissé trainé un me.Hide quelque part?
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
19 nov. 2019 à 12:28
Non, je ne trouve aucun Hide.
0
Rejoignez-nous