Probleme de formulaire

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 8 août 2006 à 15:38
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 10 août 2006 à 20:18
bonjour,
j'ai un formulaire a partir duquel j'en appelle un autre
mon_form fo= new mon_form();
mon_form.show();
 et je voudrais que le formulaire qui appelle mon form soit fermé ensuite
alors je mets this.dispose()
comme ce formulaire contient l'autre ;lorsqu'il est disposed l'autre l'est egalement
Comment peut -on faire pour faire disparaitre le fromulaire appelant sans faire disparaitre le fils?

15 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 août 2006 à 15:50
y a un souci dans ton code ;)

mon_form fo= new mon_form();
fo.show();

le this.Dispose() ne ferme pas que le formulaire mais aussi l'application... du moins si ce formulaire est celui-ci qui est lancé au démarrage de l'application.

Essaye plutot de le masquer :
this.Hide();

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 août 2006 à 15:51
Salut,
Il ne faut pas appeler la méthode Dispose mais la méthode Close.
Et ça marche... :-)

<hr size="2" />VC# forever
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
8 août 2006 à 16:06
ok


merci


sinon en general fo faire close ou dispose?


je croyais que dispose ct mieux . que ca supprimer ttes les ressources et que donc ct plus leger apres un dispose qu'n close.


Bref question suivante quand utiliser close et quand utiliser dispose?


 
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 août 2006 à 16:15
ca dépend...

si tu as encore besoin d'utiliser ton formulaire, il est préférable de faire un Close()... par exemple, récupérer la valeur d'une propriété...
par contre, si le formulaire n'a plus de raison d'être... Dispose().

la meilleur habitude à prendre c'est de faire ceci :

string ret;
using (MonForm f = new MonForm()) {
    if (f.ShowDialog() == DialogResult.OK) {
       // je travaille encore avec les propriété de mon formulaire...
       ret = f.MonPropriete;
    }
} // ici le using fait un Dispose() tout seul.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0

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

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 août 2006 à 18:06
Si c'est une forme modale ouverte avec ShowDialog, Close n'appelle pas Dispose, il faut le faire soit même, cela permet de faire apparaître et disparaître la forme plusieurs fois sans la créer et la détruire à chaque fois, par contre avec une forme non modale ouverte avec Show, Close appelle toujours Dispose.

public partial class Form1 : Form
{
    public Form1( )
    {
        InitializeComponent( );


        this.Click += delegate { this.Close( ); };
        this.Show( );
    }


    protected override void Dispose( bool disposing )
    {
        try
        {
            MessageBox.Show( "Disposed !!" );
        }
        finally
        {
            base.Dispose( disposing );
        }
    }
}
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 août 2006 à 18:12
Il me semblait bien que Close() était appelé, mais je voulais pas dire de bêtise.
Par contre, je ne connaissais pas la petite astuce pour la fenêtre ouverte en ShowDialog !
Donc merci pour cette petite précision...

<hr size="2" />VC# forever
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 août 2006 à 06:25
Merci bien pour toutes ces precisions cela me semble un peu plus clair maintenant.
Pour résumer si je veux pouvoir rappeler un formulaire qui a été fermé sans en créer un nouveau, je fais
formulaire.showdialog et ensuite je peux faire close (ou cliquer sur la croix du formulaire)?
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 août 2006 à 06:44
par contre, g pas capté le dialogresult.OK, comment attribue-t-on la valeur OK ?
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 août 2006 à 06:47
dans mon formulaire
g instancier l'evenement from closed et mis DialogResult=DIalogresult.OK
c ca?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
10 août 2006 à 09:50
dans les propriétés de ton formulaire, tu en as 2 qui sont pratiques :
<li>AcceptButton</li><li>CancelButton</li>Par défaut, ton formulaire changera la couleur du bouton "AcceptButton" pour qu'il soit "par défaut", et le "CancelButton" sera relié à la touche Echappe.

Dans le délégue de l'évènement Click de ton AcceptButton, à la fin de ton traitement il te suffit de faire ceci :
this.DialogResult = DialogResult.OK; // ou this est le formulaire courant.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 août 2006 à 10:05
ah ben en parlant de ca,
je n'ai aucune idee de comment on utilise ces boutons (comment on les configure)
ainsi que le helpbutton

je les ai jamais utilisé au final

merci pour ton aide
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 août 2006 à 10:13
Tu peux tout faire via le designer, dans les properties (tu vas pas exemple sous CancelButton, et la il te créer une liste avec tout les boutons disponible sur ta form qui peuvent être rattaché au Cancel).

Pour le bouton d'aide, il suffit d'assigner à un Control l'event HelpRequested qui est déclenché quand on clique dessus avec le "?".

<hr size="2" />VC# forever
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 août 2006 à 12:33
je ne comprends pas trop l'interet des cancel button et accept button


en fait on assigne des boutons du formulaire et ensuite ? (cela donne - t -il la propriete dialogresult.ok ou Cancel au dialogresult du formulaire?

Par contre pour le help button , je pensais qu'il y aurait justement un bouton avec ? pres des bouton sstandards en haut a droite du formulaire. Mais si je met la prpriete helpbutton a true, je n'obtiens rien, je vois pas du totu comment faire.

Ou pourrais-je trouver des exemples?
ou en avez vous?

Merci
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 août 2006 à 13:36
Pour le help, les properties MaximizeBox et MinimizeBox doivent absolument être les deux sur false. Ensuite tu verras apparaître le point d'interrogations. Puis, tu t'abonnes à l'event HelpRequested comme dit plus haut, et l'event sera déclenché si le user clique sur le bouton "?" puis sur ton control.

Pour ce qui est des CancelButton et AcceptButton, c'est juste des simplifications. Si tu as par exemple un bouton annuler qui ferme ta form, tu le set comme CancelButton et si le user clique sur ESC ca va directement appeler le code qu'exécute le bouton annuler (et donc certainement fermer la Form). En plus, ça te permet de faire directement des tests du genre :

if(myForm.ShowDialog() ==
DialogResult.Cancel)

{
   // ...
}

<hr size="2" />VC# forever
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
10 août 2006 à 20:18
Tu peux eviter de passer par un évènement, la classe button a une propriété DialogResult, c'est la valeur qui sera renvoyée si tu affiches la forme avec ShowDialog.

public class Form2 : Form
{
    public Form2( ) : base( )
    {
        Button accept = new Button( );
        accept.Text = "OK";
        accept.Location = new Point( 10, 10 );
        accept.DialogResult = DialogResult.OK;
        this.AcceptButton = accept;


        Button cancel = new Button( );
        cancel.Text = "Cancel";
        cancel.Location = new Point( 10, 80 );
        cancel.DialogResult = DialogResult.Cancel;
        this.CancelButton = cancel;


        this.Controls.AddRange
        (
            new Control[ ] { accept, cancel }
        );
    }
}
0
Rejoignez-nous