Ouverture/Fermeture de formulaire

coleoptere Messages postés 163 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 24 octobre 2018 - 27 avril 2013 à 03:57
coleoptere Messages postés 163 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 24 octobre 2018 - 28 avril 2013 à 00:20
Bonsoir,
J'obtiens le message suivant lorsque je ferme un formulaire et que je l'ouvre à nouveau
L'opération n'est pas valide en raison de l'état actuel de l'objet.

Pour ouvrir le formulaire je fais:
Form2.show()
Pour fermer le formulaire je fais:
Me.close
Me.dispose(True)

Cela vient-il de ma façon de fermer le formulaire ?
Merci de votre aide

10 réponses

Utilisateur anonyme
27 avril 2013 à 04:21
Bonjour,

Essaie de faire disparaître cette ligne, juste pour voir.

Me.dispose(True)


En principe, dispose libère toutes les ressources allouées à un objet et l'objet n'est plus utilisable.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 avril 2013 à 07:30
Bonjour
J'ignore comment fonctionne exactement VB.Net, mais, si comme VB6, il n'est peut-être pas très astucieux de décharger complètement un Form, lorsque l'on a l'intention de le montrer à nouveau ultérieurement.
Il est plus avantageux de ne le charger qu'une fois, puis de le montrer ou de le cacher en fonction des besoins.
J'avais fait plusieurs tests à ce propos sous VB6. décharger ne faisait pratiquement rien gagner en mémoire mais diminuait les performances de manière assez significative.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour ucfoutu.
Dans le même esprit, l'objet Form possède la propriété Visible ainsi que les méthodes Show et Hide. Comme en vb6, autant qu'il m'en souvienne.

Cordialement.


Étant illettré, je signe d'une croix : ×
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
27 avril 2013 à 09:42
Bonjour,

Si depuis form1 (par exemple) tu fais :

Form2.show()


Pour fermer form2 ensuite, soit la [X] rouge (haut droit) et assimilé, soit par le code sur form2 (dans cet exemple) et c'est tout, soit :

Me.Close()


Est-ce que ça tourne ?

Cordialement, Joe.
0

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

Posez votre question
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
27 avril 2013 à 09:44
suite...

S'il y a du code encore en dessous de "Me.Close()", écrit :


Me.Close()
Exit Sub



Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 avril 2013 à 10:01
Bonjour, Zermelo,
Je me rappelle entre autres un des aspects de mes tests sous VB6.
Il doit à mon avis être grossi modo le même, avec les mêmes résultats, sous VB.Net ===>>
Deux forms (form1 et form2) avec, sur chacune, un bouton de commande
Sur form1
Private Sub Command1_Click()
  MsgBox Form2.toto
  Form2.Show
End Sub

Sur Form2 :
Public toto As String
Private Sub Command1_Click()
 toto = "coucou"
 Unload Me
End Sub

on lance et on clique sur le bouton de form1 rien ne s'affiche et on arrive à Form2 et on y clique sur le bouton de commande>> on arrive )à Form1 et cette fois-ci un clic affiche "coucou", bien que form2 ait été déchargé. Notons pourtant que nous avons écrit Form2.toto.
Recommençons maintenant le test,; mais en détruisant (pas se contenter d'un déchargement Form2 en y mettant ce code (sur Form2) :
Public toto As String
Private Sub Command1_Click()
 toto = "coucou"
 Set Form2 = Nothing
 Unload Me
End Sub

cette fois-ci, "coucou" ne réapparaitra plus jamais dans Form1
Ce test met bien en évidence la différence entre le déchargement (qui ne libère qu'une petite partie de la mémoire) et la destruction, qui supprime carrément le Form. Je suppose que la mise à Nothing par VB6 se traduit par le Dispose de VB. Net.



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Tu supposes bien ucfoutu, comme d'habitude.


Étant illettré, je signe d'une croix : ×
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
27 avril 2013 à 10:57
Jacques, Zemedo,

En effet, il y a un sorte de préchargement, ou alors d'auto-chargement (Hide) quand on invoque depuis une forme l'objet d'une autre form dont les objets sont généralemnt accessibles dans charger la form.

Ce qui d'ailleurs cause des tracas avec les comboBox qui se retrouvent comme cliqués tout seul...

Mais en utilisation classique le Me.Close() il ceci suffit, car est n'est pas censé d'adresser à une form fermée, en sus la fermeture se fera globalement en fin pas END + RESET implicite.

Par contre si on passe par la procédure évènementielle CLOSING peut être que là c'est déchargé, je ne sais et je m'en moque, n'en ayant pas besoin...

Cordialement, Joe.
0
À toutes et à tous.
L'évènement Closing est déclenché par la méthode Close. La fermeture du formulaire se produit quand toutes les instructions contenues dans la procédure d'évènement sont exécutées. Autrement dit, Closing est une sorte d'espèce d'avatar du QueryUnload de vb6.

Cordialement.

Étant illettré, je signe d'une croix : ×
0
coleoptere Messages postés 163 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 24 octobre 2018
28 avril 2013 à 00:20
Bonsoir,

Merci de vos réponses, cela me sera surement utile.

Je suis confus, car mon problème s'est résolu lorsque j'ai supprimé une ligne de code "oubliée" qui me faisait ouvrir ma base 2 fois.

Merci encore,
bonne nuit
0
Rejoignez-nous