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

Signaler
Messages postés
832
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
24 octobre 2020
-
Messages postés
191
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
21 octobre 2020
-
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

Messages postés
14923
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 octobre 2020
447
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.
Messages postés
832
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
24 octobre 2020
2
Bien vu, c'est en fait Form_Activate, ça fonctionne, merci.
Messages postés
14923
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 octobre 2020
447
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.
Messages postés
832
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
24 octobre 2020
2
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 !
Messages postés
14923
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 octobre 2020
447
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

Messages postés
832
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
24 octobre 2020
2
Ça fonctionne en effet nettement mieux.
Merci pour tes réponses rapides et pertinentes.
Messages postés
14923
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 octobre 2020
447
de rien
Messages postés
191
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
21 octobre 2020
5
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,