Passer un paramètre d'une forme à l'autre

Résolu
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 3 mai 2019 à 16:16
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 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

7 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
3 mai 2019 à 19:01
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
4 mai 2019 à 10:46
Bien vu, c'est en fait Form_Activate, ça fonctionne, merci.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
4 mai 2019 à 11:36
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
Modifié le 4 mai 2019 à 16:14
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 !
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
4 mai 2019 à 16:15
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

0

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

Posez votre question
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
4 mai 2019 à 16:18
Ça fonctionne en effet nettement mieux.
Merci pour tes réponses rapides et pertinentes.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
4 mai 2019 à 17:34
de rien
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 5 mai 2019 à 10:28
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,
0
Rejoignez-nous