Comment fermer une form modal sans form.Hide associé à un bouton ?

cs_jamey Messages postés 8 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 janvier 2003 - 23 janv. 2003 à 18:22
jmdevz Messages postés 13 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 5 décembre 2003 - 24 janv. 2003 à 10:14
Bonjour,

J'ai une form principale où je sélectionne par des commands l'ouverture d'autres forms que je quitte avec ''form.hide'' derrière un bouton.
Mon Problème est que ces forms filles dans leurs executions ouvrent une form ressemblant à un MsgBox où il n'y a qu'un Label temporisé dont voici le code :

frmMessage.LabelMessage.Caption = "Test en cours ..."
frmMessage.Show vbModal
Call Sleep(10000)
frmMessage.Hide
Unload frmMessage

Le programme plante sur cette form (frmMessage) qui ne disparait pas au bout des 10 sec. Je suis obligé de tuer l'application avec le bon vieux Ctrl+Alt+Suppr

Merci de m'expliquer où je fais fausse route

cyrille68

6 réponses

Int19h Messages postés 58 Date d'inscription jeudi 25 avril 2002 Statut Membre Dernière intervention 19 juillet 2003
23 janv. 2003 à 18:34
Salut

Si je me trompe pas :

' Reste dans la form d'appel
frmMessage.LabelMessage.Caption = "Test en cours ..."
frmMessage.Show vbModal

' Mais ca doit etre dans la form qui est afficher
Call Sleep(10000)
frmMessage.Hide
Unload frmMessage

Explication : vbmodal veux dire que tant que l'on ne
decharge pas la form afficher, on attent la...

Je sais pas si c'est super claire, mais trace ton code
avec F8, tu verras mieux ce qu'il se passe

++

Int19h
0
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
23 janv. 2003 à 18:34
Bijour,

Ok, j'ai localisé ton problème voila, une "form" ne peut être modal d'elle même et donc il faut que tu retire ton "vbModal".

Si tu veux qu'elle soit quand même Modal tu l'écrit dans la forme qui l'active.

Voila et A++
[Gally Home Corp]
0
tardigrade Messages postés 208 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 décembre 2008
23 janv. 2003 à 18:59
Salut,

Je ne t'ecris pas pour ta question mais pour te donner un tuyau tres utile quand tu programmes sous vb.

Si tu ecris :

Private Sub Form_Load()
Do While 1
Loop
End Sub

Si maintenant tu lances le programme, il ne s'arrete jamais et c'est bien embetant. Pour arreter ton programme sans arreter vb (comme tu fais en ce moment Ctrl+Alt+Suppr) utilise Ctrl+Arrêt défil. le programme se met en pause et tu peux l'arreter sous vb.

Autre solution qui n'en est pas vraiment une. tu aurais pu ecrire:

Private Sub Form_Load()
Do While 1
DoEvents
Loop
End Sub

dans ce cas tu peux retourner sous vb pour arreter ton programme par le menu execution. a chaque tour la fonction DoEvents permet au programme de rendre la main a l'application. c'est bien pratique pour les rafraichissements de fenetres mais attention ca fait perdre du temps a ta boucle.

J'espere que ca te servira.

cao
0
jmdevz Messages postés 13 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 5 décembre 2003
24 janv. 2003 à 08:56
Bonjour,

le problème dans ton code c'est que ta form frmMessage est ouverte modalement, ce qui entraine que le code qui suit :
frmMessage.Show vbModal
n'est exécuté qu'après la fermeture de frmMessage

Je te propose ceci :

le code de l'ouverture devient :
frmMessage.LabelMessage.Caption = "Test en cours ..."
frmMessage.Show vbModal
Unload frmMessage

et sur la form frmMessage :

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Activate()
Me.Refresh
Call Sleep(10000)
frmMessage.Hide
End Sub

J'ai testé ça semble fonctionner

A+
0

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

Posez votre question
cs_jamey Messages postés 8 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 janvier 2003
24 janv. 2003 à 10:06
Merci pour ton aide car j'ai testé dans le cadre de mon application et ça fait bien ce que je voulais que cela fasse.

de plus, le fait d'écrire ''Unload frmMessage'' au niveau de la Command qui affiche cette frmMessage, me permet de faire exécuter autant de fois que je le souhaite cette form frmMessage.

Connaîtrais-tu une astuce pour me permettre de déplacer cette form frmMessage en la sélectionnant avec la souris ?

cyrille68
0
jmdevz Messages postés 13 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 5 décembre 2003
24 janv. 2003 à 10:14
Si tu as une barre des titres : en cliquant sur celle-ci et en déplaçant la feuille
si tu n'as pas de barre des titres, il va falloir jouer avec les événements mouse_down, mouse_move et mouse_up

A+
0
Rejoignez-nous