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 :

Instanciation visible pour plusieurs form


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Instanciation visible pour plusieurs form
    Bonjour,
    Je pose le problème.
    J'ai deux Form (form1 et form2) , une classe qui défini une station de base (Station), et un main() (normal).
    la classe ('structure'):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public class Station
        {
        public bool b_Pleine;                  
        public int   i_NbrLitre;                
        public bool b_InUse;
    je souhaite instancier 2 stations pour quelles soient visible de form1 et form2.
    Station station_Dubois = new Station;
    Station station_Dutroud = new Station;

    de Form1 avec un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void boutonForm1_Click(object sender, EventArgs e)
    {
    station_Dubois.b_Pleine = true;
    station_Dutroud.b_InUse = true;
    }
    et dans form2 un autre truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void boutonForm2_Click(object sender, EventArgs e)
    {
    station_Dubois.i_Nbrlitre = 200;
    }
    Par exemple. Comment je fais au mieux??

    Merci par avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    Le plus simple est d'utiliser la notion d'objet statique et le concepte de Contexte.

    Un contexte regroupe divers informations utile à toute ton application, en général il s'agit d'une classe "static"

    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
    public class static Context
    {
         // Possibilité 1
         public static Station Station1;
     
         // Possibilité 2
         private static Station station2;
         public static Station Station2
         {
              get
              {
                   if (station2 == null) { station 2 = new Station(); }
     
                   return station2;
              }
              set { station2 = value }
         }
    }
    dans les 1er cas tu gère tout manuellement, dans le 2ème tu est protégé contre les NullRefException. Après tout dépend de comment tu conçoit ton logiciel.


    Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(Context.Station1.b_Pleine)
    {
       Context.Station1.b_Pleine = false;
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par TheBlackReverand Voir le message
    Bonjour,

    Le plus simple est d'utiliser la notion d'objet statique et le concepte de Contexte.

    Un contexte regroupe divers informations utile à toute ton application, en général il s'agit d'une classe "static"

    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
    public class static Context
    {
         // Possibilité 1
         public static Station Station1;
     
         // Possibilité 2
         private static Station station2;
         public static Station Station2
         {
              get
              {
                   if (station2 == null) { station 2 = new Station(); }
     
                   return station2;
              }
              set { station2 = value }
         }
    }
    dans les 1er cas tu gère tout manuellement, dans le 2ème tu est protégé contre les NullRefException. Après tout dépend de comment tu conçoit ton logiciel.


    Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(Context.Station1.b_Pleine)
    {
       Context.Station1.b_Pleine = false;
    }
    D'accord, mais le problème c'est que si j'ai 50 stations la classe statique station sera énorme.... alors qu'avec 1 prototype (structure) et juste 50 instanciation on serait plus propre non??
    D'où ma question parce qu'avec une méthode static on ne peut pas instancié....

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Points : 338
    Points
    338
    Par défaut
    Peux-tu est plus explicite sur cette notion de "structure" et de "prototype" ?

    Tu ne cite qu'une fois le mot "structure" dans ton premier message et son rôle n'est pas très compréhensible en l'état...


    La beauté de ta classe (50 variables statiques) n'impacteras en rien la performance de ton application mais uniquement sa lisibilité et maintenabilité.

    En mémoire consommée : 50 variables Station < 1 liste de 50 Station
    Par contre en matière d'évolutivité et maintenabilité la liste est bien meilleur.


    Voici une version plus propre
    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 class static Context
    {
         private static Dictionary<string, Station> stations;
         public static Dictionary<string, Station> Stations
         {
              get
              {
                   if (stations == null) { stations = new Dictionary<string, Station>(); }
     
                   return stations;
              }
              set { stations = value }
         }
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je pense que tu as 2 questions les voici :
    Comment stocker mes données correctement
    Comment les rendre visible à plusieurs forms.

    Je stockerai les données dans une liste d'objets en ajoutant la notion manquantes 'Nom'
    Pour un projet simple utilise le Static.
    Et une méthode d'initialisation de tes données dans la liste d'objet que tu devra appeler au démarrage (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
    21
    22
    23
    24
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            public static List<Station> Stations = new List<Station>();
            public void RempliStations()
            {
                Stations.Add(new Station() { Nom = "Dubois", b_InUse = false, b_Pleine = true, i_NbrLitre = 10 });
                // ....
            }
     
        }
     
     
        public class Station
        {
            public string Nom;
            public bool b_Pleine;
            public int i_NbrLitre;
            public bool b_InUse;
        }

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Mouais attention aux variables statiques avec les débutants.
    Ça devient vite le foutoir dans le code si toutes les instances peuvent accéder aux mêmes variables en même temps...

    J'ai cru remarquer qu'il voudrait associer une instance de station avec une instance d'un form; peut-être pour la modifier ? Un genre de page d'édition d 'une station ?
    Dans ce cas là : la form principale contient une instance d'une liste de stations. Pourquoi pas l'afficher dans une combobox.
    La sélection d'une station dans la combo provoque l'instanciation de la form d'édition et on passe simplement la station à éditer dans le constructeur de la from d'édition.

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Ce n'est pas ce que j'ai cru comprendre.
    je souhaite instancier 2 stations pour quelles soient visible de form1 et form2
    Sinon oui ça serait mieux si tel est son besoin.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par lead8209 Voir le message
    Mouais attention aux variables statiques avec les débutants.
    Ça devient vite le foutoir dans le code si toutes les instances peuvent accéder aux mêmes variables en même temps...

    J'ai cru remarquer qu'il voudrait associer une instance de station avec une instance d'un form; peut-être pour la modifier ? Un genre de page d'édition d 'une station ?
    Dans ce cas là : la form principale contient une instance d'une liste de stations. Pourquoi pas l'afficher dans une combobox.
    La sélection d'une station dans la combo provoque l'instanciation de la form d'édition et on passe simplement la station à éditer dans le constructeur de la from d'édition.
    Oui Merci! Le plus simple c'est bien ca!
    Je vous remercie tous!!

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

Discussions similaires

  1. [Débutant] 1 seul Monthcalendar pour plusieurs Forms
    Par IL-MAFIOSO dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/06/2012, 11h06
  2. Un seul ADOconnetion pour plusieurs FORM
    Par souhila2007 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 20/03/2011, 17h23
  3. Réponses: 6
    Dernier message: 05/11/2007, 11h51
  4. plusieurs source pour un form
    Par polo(31) dans le forum Access
    Réponses: 6
    Dernier message: 28/06/2006, 09h55
  5. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50

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