OVH Cloud OVH Cloud

Set xxx=nothing

2 réponses
Avatar
TouTi
Bonjour

Il y a quelque temps j'avais rencontré le problème de mémorisation de
ressource même si la form qui les contenait été unloadée. Une solution
proposée était de libérer les ressources avant la fermeture de la form

Exemple d'une fenêtre FORM1 (boite d'options,....) :
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
Set form1 = Nothing
End Sub

Malheureusement, je rencontre des problèmes à la fermeture de mon programme.
Dans la fenêtre générale, j'ai un bout de code qui permet de ne pas le
quitter si certaines fenêtres ne sont pas fermées

exemple à la fenêtre générale FORM2
Private Sub Form_Unload(Cancel As Integer)
nbform = Forms.Count
For i = 0 To Forms.Count - 1
On Error Resume Next
If Forms(i).Name = "cond" Then Unload Forms(i): nbform = nbform - 1
Next i
If nbform > 2 Then MsgBox "Il faut fermer d'autres fenêtres.": Cancel =
True
End Sub

Après l'utilisation de la fenêtre Form1, il arrive que le code de Form2
m'indique que la fenêtre Form1 est encore présente.

Actuellement, form1 est appelée tout simplement avec les intructions load et
show.

Devrais-je alors les appeller comme ceci : ???
MaFeuille As Form1
Set MaFeuille = New Form1
MaFeuille.Show

Merci et Bon W-E


--
TouTi

2 réponses

Avatar
Christian Hugoud
Déjà tu ne peux pas faire depuis la form elle-même set laform=nothing. Il
faut que tu le fasses de l'extérieur de laform.

D'autre part, Unload Forms(i) ne garantit pas que la form en question soit
déchargée. Il faudrait la mettre à nothing.

Dans tous les cas, si laform référence un objet extérieur à elle-même dans
une de ses variables, elle ne se déchargera pas. Il faut mettre toutes ses
variables qui pointent sur des objets à nothing dans le unload.

Hope this helps...

Christian


"TouTi" <gelapplication[NsP]@tiscali.fr> a écrit dans le message de news:

Bonjour

Il y a quelque temps j'avais rencontré le problème de mémorisation de
ressource même si la form qui les contenait été unloadée. Une solution
proposée était de libérer les ressources avant la fermeture de la form

Exemple d'une fenêtre FORM1 (boite d'options,....) :
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
Set form1 = Nothing
End Sub

Malheureusement, je rencontre des problèmes à la fermeture de mon
programme.
Dans la fenêtre générale, j'ai un bout de code qui permet de ne pas le
quitter si certaines fenêtres ne sont pas fermées

exemple à la fenêtre générale FORM2
Private Sub Form_Unload(Cancel As Integer)
nbform = Forms.Count
For i = 0 To Forms.Count - 1
On Error Resume Next
If Forms(i).Name = "cond" Then Unload Forms(i): nbform = nbform - 1
Next i
If nbform > 2 Then MsgBox "Il faut fermer d'autres fenêtres.": Cancel =
True
End Sub

Après l'utilisation de la fenêtre Form1, il arrive que le code de Form2
m'indique que la fenêtre Form1 est encore présente.

Actuellement, form1 est appelée tout simplement avec les intructions load
et show.

Devrais-je alors les appeller comme ceci : ???
MaFeuille As Form1
Set MaFeuille = New Form1
MaFeuille.Show

Merci et Bon W-E


--
TouTi




Avatar
TouTi
> Déjà tu ne peux pas faire depuis la form elle-même set laform=nothing. Il
faut que tu le fasses de l'extérieur de laform.

D'autre part, Unload Forms(i) ne garantit pas que la form en question soit
déchargée. Il faudrait la mettre à nothing.

Dans tous les cas, si laform référence un objet extérieur à elle-même dans
une de ses variables, elle ne se déchargera pas. Il faut mettre toutes ses
variables qui pointent sur des objets à nothing dans le unload.



J'ai mis en pratique tes conseils. Je verrais l'impact des modifications
lors des essais

Merci

--
TouTi