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

C# Discussion :

Récupérer l'instance du formulaire principale Winform


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut Récupérer l'instance du formulaire principale Winform
    Bonjour,

    Je cherche à mettre à jour un ToolStripStatusInfo.Text contenu dans le formulaire principale de mon application.

    Ce formulaire est instancier dans Program.Main() de façon normale.
    Pour la mise à jour du statusInfo, je voulais disposer d'une classe (singleon) m'évitant de faire la recherche du composant à chaque fois et exposant directement la propriété Text du composant.

    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
     internal sealed class ApplicationStautsInfoMessage
        {
            public const string DEFAULT_STATUS_INFO_TEXT = "Prêt";
            private static ToolStripStatusLabel _StatusInfo;
            public string StatusInfoText
            {
                get { return _StatusInfo.Text; }
                set { _StatusInfo.Text = value; }
            }
     
            static ApplicationStautsInfoMessage instance = null;
     
            public static ApplicationStautsInfoMessage Instance
            {
                get
                {
                    if(instance == null)
                    {
                        instance = new ApplicationStautsInfoMessage();
                        //_StatusInfo = Program.MainForm.StatusInfo;
                    }
                    return instance;
                }
            }
     
        }
    Le problème est comment récupérer ce composant ?
    Ma première idée était, dans Program, exposer publiquement le composant (récupéré par la ligne en commentaire). Mais je trouve dommage d'exposer cet objet à cet endroit. Et puis, en faisant Program.MainForm.StatusInfo.Text je pourrais modifier directement le texte...

    Si ça se trouve, je m'y prends mal et il y a une meilleure façon de faire ?
    Nota, j'ai des méhodes de classes (pour factoriser hors du code-behind) qui doivent aussi accéder à ce StatusInfo.

    Que me conseillez-vous ?

    P.S. : le problème suivant sera celui de la progress-bar du même formulaire.
    Je voudrais faire la même chose que dans Visual Studio.

  2. #2
    Membre expérimenté Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Par défaut
    Salut.

    Dans ton cas, je ferais bien un singleton, mais pas sur une classe gérant ton statusInfo, je transformerai mon form principal en singleton.

    Ensuite, je crée un propriété qui sert d'accesseur à mon statutInfo.

    Le formulaire principal

    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 static FRM_Princ _instance;
    public static FRM_Princ Instance
    {
            get
            {
                    if(FRM_Pinc._instance == null)
                    {
                            FRM_Pinc._instance = new FRM_Princ();
                    }
                    return FRM_Pinc._instance;
            }
    }
     
    public string StatusInfoText
            {
                get { return _StatusInfo.Text; }
                set { _StatusInfo.Text = value; }
            }
     
     
    public FRM_princ(){
    //...
    et je modifie mon main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(FRM_Princ.Instance);
    Et donc de n'importe où (enfin, c'est pas threadsafe), tu peux lire ou modifier ton StatutInfoText :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FRM_Princ.Instance.StatusInfoText = "TATATA";
    //ou
    string tatata = FRM_Princ.Instance.StatusInfoText;
    Je pense que ça devrai être bon.

    Pour la progressBar, c'est la même chose.

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    'Tain c'était tellement simple que je n'y avais pas pensé !

    Pourquoi faire simple quand on peut faire compliqué ?

    Je pense que celà devrait faire l'affaire.

    Merci El_Pedro !

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

Discussions similaires

  1. [PEAR][HTML_QuickForm] Impossible de récupérer les valeurs du formulaire
    Par Mainman dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/05/2007, 12h15
  2. Réponses: 2
    Dernier message: 24/04/2007, 00h07
  3. [Spring MVC] Récupérer des valeurs de formulaires sur n pages
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2006, 07h23
  4. [C# - Application] - Récupérer l'instance de l'application.
    Par angusyoung34 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/12/2005, 13h45
  5. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44

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