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 :

savoir si une form est ouverte pour la fermer


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut savoir si une form est ouverte pour la fermer
    Bonjour

    J'avais posté la question ci apres a la sute d'un autre post mais je pense qu'elle s'est perdue !


    Dans une form Form1
    Dans une fonction J'ouvre une fenetre de dialogue non modale Form2 et lui passe une datatable dans le constructeur

    A tout moment dans Form1 je peux repasser par la fonction d'ouverture pour envoyer une autre datatable

    A part passer par des flags public comment savoir proprement que la form2 est déja ouverte pour eviter d'en ouvrir une autre ou la fermer si nécessaire !

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Tu n'as qu'à passer ton formulaire 2 en singleton, tu seras alors sûr de n'en avoir qu'un d'ouvert et tu sauras aussi s'il est ouvert.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci

    Malheureusement je ne connais pas encore les singleton

    Comment dois-je déclarer une form singleton ?
    Comment cela va-t-il me permettre de savoir si elle est déja ouverte ?

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci saumon agile

    Mais meme s'il y a beaucoup d'articles je ne vois toujours pas pratiquement comment déclarer une form singleton, et ce que cela implique

    Sur ce sujet la je suis tout a fait débutant et démuni !

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Le principe sous-jacent du singleton, est que la classe gere elle meme sa creation (comprendre son instanciation ne doit pas etre géré par du code externe). Partant de la, les caracteristiques d'un singleton sont :

    - Un constructeur privé
    - Une propriété pour acceder à l'instance unique.

    Pour te donner un squelette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public partial class Form1 : Form
        {
            static Form1 s_instance;
     
            public static Form1 Instance
            {
                get { return s_instance ?? (s_instance = new Form1()); }
            }
     
            private Form1()
            {
                InitializeComponent();
            }
        }
    qui s'utilisera comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1 f = Form1.Instance;
    Application.Run(f);
    Une fois le singleton mis en place, la classe se manipule comme les autres à la difference que l'instance est unique, et qu'elle ne sera jamais instanciable à l'exterieur d'elle meme.

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Pas encore au bout
    Bonsoir

    Je croyais arriver au but mais ca coince encore

    J'empeche une deuxieme instanciation de la form : OK
    J'appelle un fonction publique de ma form avec la datatable que je veux

    Mais si jamais l'utilisateur feme la form, comment detecter proprement avec le plus de légéreté qu'elle n'existe plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        // **************************************************************************************************
        private void ShowForm(DataTable dtDagChauff)
        {
          if (FrmZTour == null ) // FrmZTour membre de this !
          {
            FrmZTour = new FrmDgvZoomTour();
            FrmZTour.SelectTour += new FrmDgvZoomTour.SelectTourHandler(DgvTourSelected);
            FrmZTour.Show(this);
          }
     
     
          FrmZTour.FillDgv(dtDagChauff);
        }

  9. #9
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Tu peux t'abonner à l'évènement FormClosed de FrmDgvZoomTour dans la form qui la crée.

    Et dans le Handler, tu réinitialises ta variable FrmZTour.

    Cdt.

  10. #10
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    YES

    Merci c'est effectivement ce que j'ai fait mais je dois encore m'habituer aux delegates et abonnement d'événements !


    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
        // **************************************************************************************************
        private void ShowForm(DataTable dtDagChauff)
        {
          if (FrmZTour == null )
          {
            FrmZTour = new FrmDgvZoomTour();
            FrmZTour.SelectTour += new FrmDgvZoomTour.SelectTourHandler(DgvTourSelected);
            FrmZTour.Closed += new EventHandler(this.formClosed);
            FrmZTour.Show(this);
          }
     
          FrmZTour.FillDgv(dtDagChauff);
        }
        private void formClosed(object sender, EventArgs e)
        {
          FrmZTour.Dispose();
          FrmZTour = null;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Savoir si une form est ouvert
    Par mcmana dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/07/2012, 15h07
  2. Savoir si une fenêtre est ouverte et la fermer.
    Par crazyman8 dans le forum C#
    Réponses: 7
    Dernier message: 20/02/2012, 22h36
  3. [vb2003] Comment savoir si une form est ouvert
    Par Herlece dans le forum Windows Forms
    Réponses: 15
    Dernier message: 08/11/2006, 00h43
  4. Comment savoir si une form est ouverte (créé)?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 1
    Dernier message: 30/09/2006, 11h24
  5. Vérifier si une form est ouverte
    Par nivet dans le forum Langage
    Réponses: 6
    Dernier message: 23/11/2004, 09h17

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