IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#][Débutant] Comment empecher d ouvrir plusieurs fois la meme fenetre


Sujet :

Windows Forms

  1. #1
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut [C#][Débutant] Comment empecher d ouvrir plusieurs fois la meme fenetre
    Bonjour

    Quand je cliques sur un bouton
    mon code a l air de marcher, il docke une fenetre dans le 1er Tab de mes onglets

    Mais voila, si je recliques sur le bouton, ca ouvre la meme fenetre par dessus la 1ere, et etc...

    1 - Comment empecher d ouvrir plusieurs fois la meme fenetre ??
    2 - quand je ferme la fenetre, son instance est elle détruite ?? sinon comment faire ?

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            private void button1_Click(object sender, EventArgs e)
            {   
                // Déclaration de la fenetre
                Form aFFilmsListe = new FFilmsListe(this);
     
                // On docke la fenetre dans le Tab 1
                aFFilmsListe.Dock = System.Windows.Forms.DockStyle.Fill;
                aFFilmsListe.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     
                aFFilmsListe.TopLevel = false;
                tabPage1.Controls.Add(aFFilmsListe);
     
                // Affichage de la fenetre
                aFFilmsListe.Show();
            }

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Bonsoir,

    1 - Essaye d'utiliser ShowDialog au lieu de Show
    2 - Oui elle est détruite

  3. #3
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    Essaye d'utiliser ShowDialog
    Ben non, car la form est dockée, et qu apres je ne pourrais plus rien faire tant qu elle ne sera pas fermée

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Il faut garder une reference sur la Form ouverte alors.
    comme ça tu teste si elle n'est pas null avant de l'ouvrir. Et à la fermeture de la form tu remets la réference à null

  5. #5
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il faut garder une reference sur la Form ouverte alors.
    Oui mais c est la ma question : Comment faire ?

    N y a t il pas moyen avec Handle ??

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Citation Envoyé par abelman
    Il suffit de déplacer la déclaration de ta form au niveau de ta classe par exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
             private Form m_aFFilmsListe;
     
            // Creer une variable bool estFermee dans ta classe FFilmsListe et met la à true dans l'evenement closed de cette classe
            private void button1_Click(object sender, EventArgs e)
            {   
                if (m_aFFilmsListe == null || m_aFFilmsListe.estFermee == true)
                    return;
     
                aFFilmsListe = new FFilmsListe(this);
     
                // On docke la fenetre dans le Tab 1
                aFFilmsListe.Dock = System.Windows.Forms.DockStyle.Fill;
                aFFilmsListe.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     
                aFFilmsListe.TopLevel = false;
                tabPage1.Controls.Add(aFFilmsListe);
     
                // Affichage de la fenetre
                aFFilmsListe.Show();
            }

  7. #7
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    N y a t il pas moyen de se servir des Handle de fenetre ??

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Normalement si

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToInt32(m_aFFilmsListe.Handle) renverra -1 si la fenêtre est fermée

  9. #9
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    c est quoi
    m_aFFilmsListe ?

  10. #10
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Citation Envoyé par abelman
    Il suffit de déplacer la déclaration de ta form au niveau de ta classe par exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
             private Form m_aFFilmsListe;
     
            // Creer une variable bool estFermee dans ta classe FFilmsListe et met la à true dans l'evenement closed de cette classe
            private void button1_Click(object sender, EventArgs e)
            {   
                if (m_aFFilmsListe == null || m_aFFilmsListe.estFermee == true)
                    return;
     
                aFFilmsListe = new FFilmsListe(this);
     
                // On docke la fenetre dans le Tab 1
    ....
     
            }

  11. #11
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    désolé, je ne comprends toujours pas
    car tu ecris


    m_aFFilmsListe == null
    Mais il est toujours null, puisque jamais affecté

  12. #12
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Citation Envoyé par Cazaux-Moutou-Philippe
    désolé, je ne comprends toujours pas
    car tu ecris


    m_aFFilmsListe == null
    Mais il est toujours null, puisque jamais affecté
    Je voulais écrire != null
    C'est une erreur de ma part

  13. #13
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    Merci, c est bon

    mais je trouves pas bien de creer un boolean dans l autre fenetre et de le mettre a true ou false quand on ouvre et on ferme la dite fenetre

    Venant e delphi, j utilisais

    FindWindow

    qui permait de trouver une fenetre par son nom
    je ne trouves pas cette fonction en C#, n y a t il pas d equvalent ?

  14. #14
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Non il n'y a pas d'équivalent à ma connaissance.
    Mais tu peux utiliser FindWindow de l'api Win 32

  15. #15
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    j ai été trop vite, c est pas encore bon

    dans la fenetre que j ouvre j ai déclaré une variable publique bOpen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public partial class FFilmsListe : Form
        {
            private FMain _mainForm;
            public Boolean bOpen = true
    mais dans ma main il ne la voit pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            private Form m_aFFilmsListe;
            private void button1_Click(object sender, EventArgs e)
            {
     
                if (m_aFFilmsListe != null || m_aFFilmsListe.bOpen == true)
                    return;

  16. #16
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Normal car tu déclares ta Form de film comme étant un objet de type Form
    essaye ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           private FFilmsListe m_aFFilmsListe;
            private void button1_Click(object sender, EventArgs e)
            {
    
                if (m_aFFilmsListe != null || m_aFFilmsListe.bOpen == true)
                    return;

  17. #17
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    merci infiniment de ta patience, mais débuter c est dur, meme avec le Help

    j ai commande un livre à la fnac, mais ne l aurai pas avant 10 jours (ici en Guadeloupe y a pas de livres sur C#)

    par contre ca marche toujours pas, ca compile, mais a l exécutions c aplante sur le if == true

    j ai ce message d erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    La référence d'objet n'est pas définie à une instance d'un objet.
     
    L'exception System.NullReferenceException n'a pas été gérée
      Message="La référence d'objet n'est pas définie à une instance d'un objet."
      Source="PCM_DVDTheque"
      StackTrace:
           à DVDTheque.FMain.button1_Click(Object sender, EventArgs e) dans D:\Projets_Net\PCM_DVDtheque\Main\FMain.cs:ligne 33
           à System.Windows.Forms.Control.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           à System.Windows.Forms.Control.WndProc(Message& m)
           à System.Windows.Forms.ButtonBase.WndProc(Message& m)
           à System.Windows.Forms.Button.WndProc(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.Run(Form mainForm)
           à DVDTheque.Program.Main() dans D:\Projets_Net\PCM_DVDTheque\Program.cs:ligne 17
           à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
            private FFilmsListe m_aFFilmsListe;
            private void button1_Click(object sender, EventArgs e)
            {
                if (m_aFFilmsListe != null || m_aFFilmsListe.bOpen == true)
                    return;
     
                // Déclaration de la fenetre
                m_aFFilmsListe = new FFilmsListe(this);
     
     
                // On docke la fenetre dans le Tab 1
                m_aFFilmsListe.Dock = System.Windows.Forms.DockStyle.Fill;
                m_aFFilmsListe.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     
                m_aFFilmsListe.TopLevel = false;
                tabPage1.Controls.Add(m_aFFilmsListe);
     
                // Affichage de la fenetre
                m_aFFilmsListe.Show();
             }

  18. #18
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    J ai toujours pas réussi

  19. #19
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    private FFilmsListe m_aFFilmsListe;
            private void button1_Click(object sender, EventArgs e)
            {
                if (m_aFFilmsListe == null)
                {
                     // Initialisation de la fenetre
                     m_aFFilmsListe = new FFilmsListe(this);
                }
     
                // On docke la fenetre dans le Tab 1
                m_aFFilmsListe.Dock = System.Windows.Forms.DockStyle.Fill;
                m_aFFilmsListe.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     
                m_aFFilmsListe.TopLevel = false;
                tabPage1.Controls.Add(m_aFFilmsListe);
     
                // Affichage de la fenetre
                m_aFFilmsListe.Show();
             }

  20. #20
    Membre extrêmement actif Avatar de Cazaux-Moutou-Philippe
    Inscrit en
    Mai 2005
    Messages
    674
    Détails du profil
    Informations personnelles :
    Âge : 75

    Informations forums :
    Inscription : Mai 2005
    Messages : 674
    Points : 171
    Points
    171
    Par défaut
    Merci Morpheus

    mais y doit encore manquer qq chose, car si on ouvre la fenetre la 1ere fois, ca marche, mais si je la ferme, je ne peux plus la réouvrir car

    m_aFFilmsListe
    n est plus a null, et si je la mets a null en fin de code apres le show, ben on reviens comme au début cad, ouvrir plusieurs fois la fenetre

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ouvrir plusieurs fois la même base.
    Par nek_kro_kvlt dans le forum Débuter
    Réponses: 6
    Dernier message: 19/10/2006, 17h56
  2. Ouvrir plusieurs fois le même formulaire
    Par Kloun dans le forum Access
    Réponses: 9
    Dernier message: 21/03/2006, 20h47
  3. [Struts javascript] ouvrir plusieurs fois une popup
    Par jc_romeo dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/03/2006, 09h36
  4. Réponses: 11
    Dernier message: 02/02/2005, 12h52
  5. [Servlet] Comment utilisé une servlet plusieurs fois ?
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 03/06/2004, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo