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 :

Partager une variable entre plusieurs classes


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Points : 30
    Points
    30
    Par défaut Partager une variable entre plusieurs classes
    Bonjour,

    Je debute en programmation C#.

    Je cherche a developper une fenetre dont le code (les events de chaque control) se situe dans la classe Form1.cs, et qui appelle differentes fonctions situees dans deux autres classes. L'une realise des calculs (calcul.cs), et l'autre recupere des donnees (data.cs).

    Mon probleme est que je recupere correctement mes donnees au sein de la classe data.cs, mais quand je veux les exporter dans les deux autres classes, ma variable est vide ...

    C'est vraiment une question de debutant. Comment dois-je declarer ma variable pour pouvoir la partager dans toutes les classes de mon projet?

    Merci!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Peut-on voir un peu de code là où ça pose problème ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    D'accord, voici par exemple ce que j'ai dans Form1.cs, j'appelle ma fonction de recup' de donnees:

    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
     
        private void RICBOX_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode== Keys.Enter)
            {
                object RIC = RICBOX.Text;
                object[] RTfieldlist = {"PRIMACT_1","831"};
                RTClass = new RealTimeClass();
                RTClass.RealTimeRequest(RIC, RTfieldlist);
                FeedPrice();
            }
        }
     
            private void FeedPrice()
            {
                RTClass.GetRTData();
            }
    Ensuite dans ma classe RealTimeClass.cs j'ai une callback de type 'private', ou je recupere la donnee dans une variable de type private object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    oData = (object[,])Convert.ChangeType(otmp, typeof(object[,]));
    A noter, plus haut dans la classe RealTimeClass.cs, j'ai declare une variable publique RTResult dans laquelle je veux contenir la donnee - c'est dans cet objet que je veux partager la donnee a toutes les classes de mon projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public object[,] RTResult = null;
    Toujours dans RealTimeClass.cs je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RTResult = oData;
     
            public object GetRTData()
            {
                return RTResult;
            }
    Quand je reviens dans Form1.cs j'ai la fonction Feedprice() qui appelle GetRTData() (dans ma classe RealTimeClass.cs).

    Probleme: ma variable RTResult est remplie dans RealTimeClass.cs, mais dans Feedprice() (Form1), elle est vide.

    J'ai ecarte toutes les lignes de codes non utiles a la comprehension de mon probleme, plus haut

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par jasonpolakow Voir le message
    D'accord, voici par exemple ce que j'ai dans Form1.cs, j'appelle ma fonction de recup' de donnees:

    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
     
        private void RICBOX_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode== Keys.Enter)
            {
                object RIC = RICBOX.Text;
                object[] RTfieldlist = {"PRIMACT_1","831"};
                RTClass = new RealTimeClass();
                RTClass.RealTimeRequest(RIC, RTfieldlist);
                FeedPrice();
            }
        }
     
            private void FeedPrice()
            {
                RTClass.GetRTData();
            }
    Ensuite dans ma classe RealTimeClass.cs j'ai une callback de type 'private', ou je recupere la donnee dans une variable de type private object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    oData = (object[,])Convert.ChangeType(otmp, typeof(object[,]));
    A noter, plus haut dans la classe RealTimeClass.cs, j'ai declare une variable publique RTResult dans laquelle je veux contenir la donnee - c'est dans cet objet que je veux partager la donnee a toutes les classes de mon projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public object[,] RTResult = null;
    Toujours dans RealTimeClass.cs je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RTResult = oData;
     
            public object GetRTData()
            {
                return RTResult;
            }
    Quand je reviens dans Form1.cs j'ai la fonction Feedprice() qui appelle GetRTData() (dans ma classe RealTimeClass.cs).

    Probleme: ma variable RTResult est remplie dans RealTimeClass.cs, mais dans Feedprice() (Form1), elle est vide.

    J'ai ecarte toutes les lignes de codes non utiles a la comprehension de mon probleme, plus haut
    Oula ca m'a l'air programmé comme du C++ ca!
    Attention, le C# n'a pas tout à fait les même raisonnements. Pourquoi ne pas utiliser le mécanisme d'évènements pour publier des infos? Est ce vraiement utile le cast object[,] Pourquoi se trimballer des object plutôt que des objets typés?
    Bref je pense que c'est surtout un problème de conception...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta reponse.

    En fait je dois recuperer un tableau de donnees de differents types, c'est pourquoi il me parait plus adapte de recourrir a a type object.

    La conception globale est sans doute a revoir, encore une fois je suis novice en la matiere.

    Neanmoins je tiens a separer mes classes, afin qu'elles contiennent des fonctions bien distinctes (une classe pour ce qui est recup 'de donnees, une autre pour les calculs, et les appels realises a partir de la classe Form1.cs).

    A quoi fais tu reference par rapport aux mécanismes d'évènements?

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    tu peux déclarer ton var comme variable static et il deviens connu dans tout les classe (sa est existe en java mé essayes avec c# )

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par MuslimTanger Voir le message
    tu peux déclarer ton var comme variable static et il deviens connu dans tout les classe (sa est existe en java mé essayes avec c# )
    Oui mais c'est moche

    Edit: Pour faire plus long, peux tu décrire précisement ce que tu veux, qui appelle qui, qui transmet quoi, etc

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Comment dois-je declarer ma variable pour pouvoir la partager dans toutes les classes de mon projet?
    On la déclare au niveau de la forme et on la passe en paramètre dans le constructeur (ou une fonction Init) des classes qui utilisent la variable.
    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 DataClass dataClass=new dataClass() ;
    private MyComputationClass computationClass = null ;
    ...
    computationClass= new ComputationClass(dataClass) ;
     
    public Class ComputationClass
    {
       public DataClass dataClass ;
     
       public ComputationClass(DataClass vdataClass)
       {
         dataClass=vdataClass ;
       }
       ...
    }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Merci Messieurs,

    J'ai desormais plusieurs pistes a explorer. Je vais tester tout ca.

    Bonne journee et merci pour votre aide !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2014, 18h53
  2. Réponses: 4
    Dernier message: 24/02/2009, 13h56
  3. partage d'une variable entre plusieurs threads
    Par baedal dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/02/2008, 20h33
  4. Partage de variables entre plusieurs pages
    Par bud_gw dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2005, 15h42
  5. Partager une version entre plusieurs DLL
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2005, 10h25

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