Passer un paramètre d'une forme à l'autre [Résolu]

Messages postés
551
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
3 octobre 2019
- - Dernière réponse : JeuDuTaquin
Messages postés
126
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
18 octobre 2019
- 5 mai 2019 à 10:27
Bonjour,
Je ne comprends pas pourquoi le paramètre ne passe pas.
Dans la forme qui appelle je fais
Private Sub AdjCCT_Click()
    Load LumAdjust
    LumAdjust.CCTorig = paramètre à passer
et dans la Form appelée (LumAdjust)
Public CCTorig As Single

Private Sub Form_Load()
Me.Show
CCT.Text = Str$(CCTorig) & "K"
End Sub
la valeur passée n'est pas affichée dans la TextBox CCT.

Par contre si je mets un Breakpoint sur la ligne CCT.Text = Str$(CCTorig) & "K"
quand le programme s'arrête sur cette ligne CCTorig contient bien le paramètre,
et si j'exécute cette ligne (F8) la valeur est bien affichée dans la textbox.

J'ai essayé de mettre une boucle Do Doevents Loop après me.show mais ça ne change rien.
Une idée pour que le paramètre soit effectivement passé ?
Merci
Afficher la suite 

7 réponses

Messages postés
13853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 octobre 2019
312
0
Merci
VB6 est très très loin pour moi, mais il me semble me souvenir qu'après le load, il y a un évènement qui se déclenche au 1er affichage du formulaire (Shown peut-être), c'est dans c'est éventent je pense, qu'il faut affecter ta textbox.
Herve_be
Messages postés
551
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
3 octobre 2019
2 -
Bien vu, c'est en fait Form_Activate, ça fonctionne, merci.
Commenter la réponse de Whismeril
Messages postés
13853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 octobre 2019
312
0
Merci
Attention Activate est déclenché à plusieurs reprises, dès que tu changes de form / de logiciel et que tu reviens dessus, ou si l’as réduit et que tu le réaffiches.

Je suis à peu près sûr qu’il y a un événement qui n’est déclenché qu’une fois et après le load.
Commenter la réponse de Whismeril
Messages postés
551
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
3 octobre 2019
2
0
Merci
Question subsidiaire : je voudrais que la Form chargée bloque la Form qui la charge
càd qu'on ne puisse pas revenir à la Form mère sans d'abord fermer la fille
j'utilise dont .show VBmodal

Form qui appelle
Private Sub AdjCCT_Click()
    LumAdjust.Percent = DimPower(Light)
    Load LumAdjust
Form LumAdjust appelée
Public Percent As Single
Private Sub Form_Load()
Me.Show vbModal ' Bloque la fenêtre au-dessus des autres
End Sub
Private Sub Form_Activate()
CursorBlue.Value = CursorBlue.Max - Percent * 100
End Sub
et ça fonctionne très bien : la form fille est bien ouverte avec le paramètre "Percent" transmis et je ne peux pas revenir à la mère sans fermer la fille
... sauf que lorsque je ferme la fille j'obtiens une erreur sur la ligne Load LumAdjust
364 - Object was unloaded !
Commenter la réponse de Herve_be
Messages postés
13853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 octobre 2019
312
0
Merci
Je crois me souvenir qu'il faut faire le show modal dans le formulaire appelant

un truc dans ce genre
Private Sub AdjCCT_Click()
    LumAdjust.Percent = DimPower(Light)
    LumAdjust.Show vbModa

Commenter la réponse de Whismeril
Messages postés
551
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
3 octobre 2019
2
0
Merci
Ça fonctionne en effet nettement mieux.
Merci pour tes réponses rapides et pertinentes.
Commenter la réponse de Herve_be
Messages postés
13853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 octobre 2019
312
0
Merci
de rien
Commenter la réponse de Whismeril
Messages postés
126
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
18 octobre 2019
1
0
Merci
Salut,
On peut aussi forcer le paramétrage d'un objet en lui donnant une valeur, sans que la forme ne soit rafraichie.
Pour cela il faut précharger la forme en mode invisible (load form).
Elle se charge, mais n'est pas visible… et peut-être affichée avec SHOW.

Form1: bouton : command1
Private Sub Command1_Click()
Form2.Show 1

End Sub

Private Sub Form_Load()
Load Form2
Form2!Text1 = "hello"
End Sub


Form2: bouton : command1 & un textbox
Private Sub Command1_Click()
Form2.Hide
End Sub


Ce code garde en mémoire les informations en cliquant sur le bouton de la Form2, mais sa fermeture forcera un Form_Load et un reset des objet de cette form.

On peut imaginer créer une form "fantôme" de ce type, mais il faut garder à l'esprit qu'elle peut restée ouverte après la fermeture de la fenêtre principale… il faut la clôturer lors de la fermeture de la session de la form principale avec un "UNLOAD form2".

Même si la fermeture de toutes les forms est automatique, il est préférable de faire un UNLOAD de tous les objet de type Form en clôture de session de la Form principale.

Cela évite d'avoir des cumuls de form "orphelines" qui peuvent parasiter le système… et faire un "reset" pour tuer les handels d'accès disque.

Private Sub Form_Unload(Cancel As Integer)
UNLOAD Form2
Reset
End Sub


Amuse-toi bien,
Commenter la réponse de JeuDuTaquin