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

  1. #1
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    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 !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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
    Points : 6 334
    Points
    6 334
    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 émérite
    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
    Points : 2 498
    Points
    2 498
    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 ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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
    Points : 6 334
    Points
    6 334
    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 émérite
    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
    Points : 2 498
    Points
    2 498
    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 !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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
    Points : 6 334
    Points
    6 334
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    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 émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci SirJulio

    Ca devient plus clair
    Je vais tenter le coup et voir jusqu'ou je peux aller avec ca

    J'apprécie beaucoup tes explication tres claires !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Salut!!!
    Inspire-toi de ceci

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    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).
    C'est aussi pour limiter le nombre d'instances d'une classe.

    On peut définir aussi un constructeur protégé pour un singleton j'ai déjà vu ça sur internet.

  11. #11
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    C'est aussi pour limiter le nombre d'instances d'une classe.
    Bien sur et pas le nombre : une seule, c'est le concept meme !

    On peut définir aussi un constructeur protégé pour un singleton j'ai déjà vu ça sur internet
    Il me semble que l'exemple de SirJulio c'est ca .... non ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  12. #12
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Par design, un singleton devrait être une classe non héritable. Cela n'a pas vraiment de sens d'hériter d'un singleton.
    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

  13. #13
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bien sur et pas le nombre : une seule, c'est le concept meme !
    Pas forcément, on peut très bien le limiter à une seule comme à un certain nombre.

    Citation Envoyé par olibara Voir le message
    Il me semble que l'exemple de SirJulio c'est ca .... non ?
    Non c'est un constructeur privé qu'il a utilisé.

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Pour le nombre d'instance et en jouant sur la semantique, un singleton multi-instance ne serait plus un singleton mais un multiton. Dans l'absolu, un singleton doit controler son instance, et assurer son unicité.

    Pour le constructeur, le probleme du constructeur protected, c'est qu'il faudra finaliser (sealed) les classes à un moment ou un autre (sinon tu t'exposes à une instanciation multiple). Apres, je veux bien croire qu'il existe des implementations à constructeur protégé, mais bon vu que, comme dit SaumonAgile, heriter d'un singleton, ca n'a pas vraiment de sens, à quoi bon. =p

  15. #15
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Pour le nombre d'instance et en jouant sur la semantique, un singleton multi-instance ne serait plus un singleton mais un multiton. Dans l'absolu, un singleton doit controler son instance, et assurer son unicité.
    J'avais pas fait le rapprochement avec Single bonne remarque. Par contre j'ai utilisé l'expression plusieurs instances car ça fait partie de sa définition mais personnellement je n'ai toujours utilisé qu'une seule instance...

  16. #16
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Désolé si ma remarque peut parraître bête, mais le but initial n'exige pas vraiment de singleton ou autre.

    Dans la form1, tu déclares forcément à un moment donné ta form2. Tu parles de flag public, mais un flag private mis à true dans ta fonction suffirait à savoir si tu as déjà ouvert la form2.

    De plus, pour peu que ta variable de type form2 soit définie directement dans la class form1 (pas dans la fonction), tester si l'instance que tu as créées dans ta fonction n'est pas nothing devrait suffire.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  17. #17
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci

    Tu a tout a fait raison dans l'idée ET tu vient justement de pointer deux fois le concept qui me chiffone et que je ne maitrise pas bien en cSharp et POO

    1-
    Dans la form1, tu déclares forcément à un moment donné ta form2. Tu parles de flag public, mais un flag private mis à true dans ta fonction suffirait à savoir si tu as déjà ouvert la form2.
    C'est exactement ce que j'aurais fais en C en declarant un flag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static int isForm2Open;
    Mais comme en cSharp je ne peux pas laisser des variables statique dans les fonction, je declare donc des flag dans la classe pour en garder la valeur si je reviens dans la fonction (mais je fais peut etre une grosse erreur)


    2-
    De plus, pour peu que ta variable de type form2 soit définie directement dans la class form1 (pas dans la fonction), tester si l'instance que tu as créées dans ta fonction n'est pas nothing devrait suffire.
    Ca correspond a mon avis a ce que je dis plus haut, je declare dans ma classe

    Et dans ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (Form2 != null)
    {
      Form2.dispose();
    }
     
    Form2=new Form2(MaDataTable);
    Form2.Show(this);
    Maintenant j'ai un doute :

    est ce que la declaration d'une variable private dans une fonction cSharp correspond a la déclaration static en C ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  18. #18
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Oula ! Je suis plus VBnetiste et je ne suis donc pas le mieux placé pour répondre !

    Toutefois un truc du genre :
    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
     
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
           private Form1 f;
     
        private void button1_Click(object sender, EventArgs e)
        {
            if (this.f == null)
            {
                this.f = new Form1();
                this.f.Show();
            }
            else
            {
                System.Windows.Forms.MessageBox.Show ("mais bien sur ! pas 2 fois !");
            }
         }
        }
    Devrait suffire pour interdire une deuxiéme ouverture et au besoin réactualiser lorsque la 2éme form est déjà ouverte.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  19. #19
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci

    C'est bien ce que j'ai compris
    Mais si je veux la réactualiser avec une nouvelle datatable,
    Je dois bien faire un .dispose et la réinstancier ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  20. #20
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Ben dans ce cas réactualise uniquement ce que tu as besoin.

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

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