Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fermer proprement y compris avec croix rouge

9 réponses
Avatar
Pascal
--
bonjour
J'aimerai savoir comment ouvrir une form2 depuis une autre (form1) et
surtout comment être sûr de bien libérer la mémoire du contenu de celle-là
quand je la ferme pour retourner sur la form1 ?

Form1 est la fenêtre principale qui contient un menu d'où j'appelle la
form2. Quand j'ai fini d'utiliser la form2 : je la ferme avec un menu ou la
"croix rouge" et retourne sur form1.

Cependant si j'ouvre à nouveau la form2 : elle contient toujours les infos
qu'il y avait dans les textbox avant que je la ferme.....

arrgh !
j'ai essayé ça dans la form1 :

Private Sub DécomposerRéduireToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DécomposerRéduireToolStripMenuItem.Click

Me.Hide() 'c'est la form1

Frm_decomposer.ShowDialog() 'c'est la form2

End Sub



et dans la form2
Private Sub Fermer()

Call miseAzero()

Me.Close()

End Sub


http://www.scalpa.info

9 réponses

Avatar
Fred
Bonjour

Private Sub DécomposerRéduireToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DécomposerRéduireToolStripMenuItem.Click

Me.Hide() 'c'est la form1



Dim form2 As new Frm_decomposer
form2.ShowDialog


End Sub





PS : ne commence pas tes messages avec un délimiteur de signature (deux
tirets et un espace)

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Pascal
bonjour
c'est le fait d'ouvrir comme ça Frm_decomposer :

Dim form2 As new Frm_decomposer
form2.ShowDialog


qui fait que, quand je ferme form2 , avec me.close() il n'y a plus rien en
mémoire ?

PS : ne commence pas tes messages avec un délimiteur de signature (deux
tirets et un espace)



Ah bon pourquoi ?!!

merci de ton aide
pascal
Avatar
Fred
Dans : news:462f10ff$0$27378$,
Pascal disait :
bonjour
c'est le fait d'ouvrir comme ça Frm_decomposer :

Dim form2 As new Frm_decomposer
form2.ShowDialog


qui fait que, quand je ferme form2 , avec me.close() il n'y a plus
rien en mémoire ?



Je ne sais pas ce que fait exactement Frm_decomposer.Show
Frm_decomposer est une classe et Show est, d'après la doc, une méthode
d'instance (non déclarée en Shared).

Donc, je déclare une instance de Frm_decomposer, je la crée et quand je
sors de la procédure, elle est «perdue» (en fait le GC récupèrera la
mémoire quand il en aura besoin).

Je suppose que l'écriture Frm_decomposer.Show est une facilité
syntaxique reprise du vb6. Et que l'instance créée automatiquement dans
ce cas est mémorisée par le framework d'application vb. D'où sa
réapparition au Show suivant (?)



PS : ne commence pas tes messages avec un délimiteur de signature
(deux tirets et un espace)





Ah bon pourquoi ?!!



Parce que bon nombre de lecteurs de news enlèvent automatiquement la
signature lors de la réponse !
Donc, il faut, soit en changer le paramétrage, soit faire du
copier-coller pour te répondre en citant ton post.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Bill2
Fred wrote:
Dans : news:462f10ff$0$27378$,
Pascal disait :
bonjour
c'est le fait d'ouvrir comme ça Frm_decomposer :

Dim form2 As new Frm_decomposer
form2.ShowDialog


qui fait que, quand je ferme form2 , avec me.close() il n'y a plus
rien en mémoire ?



Je ne sais pas ce que fait exactement Frm_decomposer.Show
Frm_decomposer est une classe et Show est, d'après la doc, une méthode
d'instance (non déclarée en Shared).

Donc, je déclare une instance de Frm_decomposer, je la crée et quand
je sors de la procédure, elle est «perdue» (en fait le GC récupèrera
la mémoire quand il en aura besoin).

Je suppose que l'écriture Frm_decomposer.Show est une facilité
syntaxique reprise du vb6. Et que l'instance créée automatiquement
dans ce cas est mémorisée par le framework d'application vb. D'où sa
réapparition au Show suivant (?)




euh ... si tu as une form FenetreA, et que tu fais FenetreA.show,
effectivement, tu vas retrouver les infos.

Maintenant, si tu fais
dim B as FenetreA=New FenetreA
B.show

là, tu auras une fenetre différentes à chaque fois

et pour bien libérer la mémoire :

Private Sub FenetreA_FormClosed(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
Me.Dispose(True)
End Sub
--
Bill2
Avatar
Fred
Dans : news:,
Bill2 disait :

Fred wrote:



Dim form2 As new Frm_decomposer
form2.ShowDialog









euh ... si tu as une form FenetreA, et que tu fais FenetreA.show,
effectivement, tu vas retrouver les infos.

Maintenant, si tu fais
dim B as FenetreA=New FenetreA
B.show

là, tu auras une fenetre différentes à chaque fois



Oui.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
djmcg
Merci pour ce sujet, je ne savait pas comment garder les infos.
:-))
décidément, ce forum est très instructif.
Merci.
JM



Fred a écrit :
Dans : news:,
Bill2 disait :

Fred wrote:



Dim form2 As new Frm_decomposer
form2.ShowDialog









euh ... si tu as une form FenetreA, et que tu fais FenetreA.show,
effectivement, tu vas retrouver les infos.

Maintenant, si tu fais
dim B as FenetreA=New FenetreA
B.show

là, tu auras une fenetre différentes à chaque fois



Oui.



Avatar
Fred
Dans : news:%,
djmcg disait :
Merci pour ce sujet, je ne savait pas comment garder les infos.
:-))
décidément, ce forum est très instructif.



Salut JM,

Je te conseille tout de même, en complément, de lire la doc MSDN.
Cela précise les approximations (que je fais souvent aussi pour aller
plus rapidement au but).

Exemple, ces paragraphes issus de l'aide sur la méthode Close (en
anglais chez moi)

<copie>
When a form is closed, all resources created within the object are
closed and the form is disposed.
...
The one condition when a form is not disposed on Close is when it is
part of a multiple-document interface (MDI) application, and the form is
not visible.
</copie>

Mais visiblement, cela ne correspond pas exactement à ce qu'a constaté
Pascal.
Je pense que c'est dû à l'utilisation du framework vb.NET (nous en avons
déjà parlé ensemble).

Un projet vb utilise en particulier la classe MyProject, qui contient
les propriétés partagées (Shared) :
Application de type MyApplication,
Computer de type MyComputer,
Forms de type MyForms,
User de type MyUser
et WebServices de type MyWebServices

Tout cela étant accessible via le mot clé/espace de nom My (My.Computer,
My.Forms, etc ...)
Dans la classe MyForms, sont ajoutées automatiquement une propriété par
Form créée dans le projet.
ex : si tu crées deux classes Fom1 et Form2, la classe MyForms aura une
propriété Form1 de type Form1 et une propriété Form2 de type Form2.

Lorqu'on appelle : My.Forms.Form1, la classe MyForms crée une instance
de Form1 (lors du premier appel) et la renvoie.

L'espace de nom My.Forms étant inclu par défaut, My.Forms.Form1 est donc
équivalent à Form1. D'où mon interrogation dans un post précédent.

L'écriture Form1.Show ne fait pas appel à une méthode partagée de la
classe Form1, mais bien à la méthode Show de l'instance Form1 (en tant
que propriété de My.Forms cette fois ci).

Ces instances créées automatiquement lors de leur premier appel sont
conservées. D'où leur réapparition lors d'un second appel.

Ce que je n'ai pas déterminé, c'est où le Close ou le Dispose sont
interceptés pour que le Dispose ne soit pas fait.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
djmcg
Merci fred.
Je doit bien avouer que j'ai un peux de mal avec le msdn.
Soit je fait mal mes recherches ou soit je ne suit pas très doué, ce qui
est tout à fait possible :-) (la programmation, ce n'est pas mon métier").
J'ai aussi besoin avec la théorie d'exemple pour comprendre et le msdn
donne souvent en anglais.
Maintenant, j'utilise a font le site de monsieur lasserre et je me suit
acheter deux livre dont le manuel de référence. Je me suit débarrassé de
la doc de vb6 et j'essaye d'oublier la programmation en QuickBasic que
j'ai utilisé énormément. Dorénavant je poserais mes questions uniquement
quand je serais bloqué parce-que l'idée, piste ou exemple m'aide a
relancé ma recherche de manière plus "logique". Il faut dire que
j'avance bien mon premier module commence a prendre form(e).
Voila ce "petit" mot comme prétexte pour dire MERCI A TOUS.
Jean-Marie

Fred a écrit :
Dans : news:%,
djmcg disait :
Merci pour ce sujet, je ne savait pas comment garder les infos.
:-))
décidément, ce forum est très instructif.



Salut JM,

Je te conseille tout de même, en complément, de lire la doc MSDN.
Cela précise les approximations (que je fais souvent aussi pour aller
plus rapidement au but).

Exemple, ces paragraphes issus de l'aide sur la méthode Close (en
anglais chez moi)

<copie>
When a form is closed, all resources created within the object are
closed and the form is disposed.
...
The one condition when a form is not disposed on Close is when it is
part of a multiple-document interface (MDI) application, and the form is
not visible.
</copie>

Mais visiblement, cela ne correspond pas exactement à ce qu'a constaté
Pascal.
Je pense que c'est dû à l'utilisation du framework vb.NET (nous en avons
déjà parlé ensemble).

Un projet vb utilise en particulier la classe MyProject, qui contient
les propriétés partagées (Shared) :
Application de type MyApplication,
Computer de type MyComputer,
Forms de type MyForms,
User de type MyUser
et WebServices de type MyWebServices

Tout cela étant accessible via le mot clé/espace de nom My (My.Computer,
My.Forms, etc ...)
Dans la classe MyForms, sont ajoutées automatiquement une propriété par
Form créée dans le projet.
ex : si tu crées deux classes Fom1 et Form2, la classe MyForms aura une
propriété Form1 de type Form1 et une propriété Form2 de type Form2.

Lorqu'on appelle : My.Forms.Form1, la classe MyForms crée une instance
de Form1 (lors du premier appel) et la renvoie.

L'espace de nom My.Forms étant inclu par défaut, My.Forms.Form1 est donc
équivalent à Form1. D'où mon interrogation dans un post précédent.

L'écriture Form1.Show ne fait pas appel à une méthode partagée de la
classe Form1, mais bien à la méthode Show de l'instance Form1 (en tant
que propriété de My.Forms cette fois ci).

Ces instances créées automatiquement lors de leur premier appel sont
conservées. D'où leur réapparition lors d'un second appel.

Ce que je n'ai pas déterminé, c'est où le Close ou le Dispose sont
interceptés pour que le Dispose ne soit pas fait.




Avatar
Fred
Dans : news:,
djmcg écrivait :
Merci fred.
Je doit bien avouer que j'ai un peux de mal avec le msdn.



Je crois qu'il y a la version française de la MSDN là dedans.
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyIDþ6f2099-b7b4-4f47-a244-c96d69c35dec

Je n'en suis hélas pas très sûr :-(

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)