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 :

C# passage d'objets d'une classe à une autre


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut C# passage d'objets d'une classe à une autre
    Bonjour,

    Je rencontre des difficultés pour faire passer des objets d'une classe à une autre.

    J'ai un timer dans une interface WinForm, et je souhaiterais qu'il effectue des actions à certains intervalles. Je n'arrive cependant pas à lui donner accès aux variables ou aux fonctions contenus dans l'autre classe.
    J'ai essayé en mettant la classe et les variables publiques... Sans succès. Et j'ai aussi essayé avec des Get, mais ca n'a pas marché non plus. Est-ce qu'il y a une solution ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Salut,

    Quelle est l'erreur ? Elle se produit à la compilation ou à l'exécution ?
    Enfin, montre nous un peu de code qu'on puisse t'aider efficacement !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Voici le code de mon form :
    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
    27
    28
    29
    30
    31
    32
    33
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            public void Form1_Load(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
                /* Je souhaiterais pouvoir faire appel aux variables et aux fonctions de mon objet ici. 
    J'ai essayé de le faire avec label15.Text = objet1.var5; mais j’obtiens l'erreur : le nom objet1 n'existe pas dans le contexte actuel.
    */
            }
        }
    }
    Mes objets sont créés dans le main et contiennent des variables de type bool, string et int.

    Comme je l'ai indiqué précédemment, je les ai rendu publique, mais cela n'a pas résolu le problème.

    Voici le constructeur :
    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 class donnees
        {
            // variables des objets données
            public int var1;
            public int var2;
            int var3;
            int var4;
            bool var4;
            string var5;
     
            public donnees()
            {
                var1 = 0;
                var2 = 0;
                var3 = 0;
                var4 = true;
                var5 = "bonjour";
            }
     
            public void ma_fonction() {}
    }
    Dans le main je créé mes objets avec
    donnees objet1 = new donnees();

    Le problème est que ces objets ne semblent pas accessible. Pourtant je les ai rendu publics...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Ta classe avec la méthode Main ressemble à ceci ?
    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
    27
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        static class Program
        {
     
            public static donnees objet1;
     
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                objet1 = new donnees();
                objet1.var1 = 1;
                // ...
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
    Dans ce cas c'est normal que tu ne puisses pas y accéder, la variable appartient à la classe Program.
    Deux manières de faire pour y accéder :
    Tu pourras y accéder depuis ton form en faisant :
    ou alors passer ta variable dans le constructeur du formulaire.

    Classe Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private donnees myObject;
     
    public Form1()
            {
                InitializeComponent();
            }
     
    public Form1(donnees pMyObject) : this()
            {
                myObject = pMyObject;
            }
    Classe Program :
    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
    static class Program
        {
     
            private static donnees objet1; // on peut laisser la variable en private
     
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                objet1 = new donnees();
                objet1.var1 = 1;
                // ...
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1(objet1));
            }
        }
    Tu auras accès à tes valeurs grâce à myObject.

    NB : il est relativement rare dans une application WinForm d'ajouter du contenu dans la classe Program !

    Si tu ne comprends pas quelques lignes de code, n'hésite pas à poser des questions

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    merci beaucoup pour ton aide !!!

    Je n'arrive pas à faire la première méthode... J'ai essayé avec :
    int a = Program.objet1.var1;
    Lorsque je commence à taper, visual studio reconnait jusqu'à int a = Program. et après il ne me propose que Equals et ReferenceEquals... Je ne voie pas mes objets, et quand je complète quand même j'obtiens comme erreur : WindowsFormsApplication1.Program ne contient pas de définition pour objet1...


    Le seconde méthode fonctionne, mais du coup j'arrive à accéder à mes objets à partir du Form1, mais pas à partir du timer... J'ai essayé en passant par une variable intermédiaire dans le form, mais il ne voit pas non plus cette variable intermédiaire à partir du timer...
    Je n'ai pas non plus réussis à faire passer mes objets en entrée dans le timer...

    Saurais-tu comment faire stp ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Pour la solution 1, ta classe où se trouvent la méthode Main() s'appelle bien Program ? Tu as bien déclaré un attribut de classe comme dans mon exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static donnees objet1;
    Car celà doit fonctionner !

    Pour la seconde méthode, es-tu sûr d'avoir déclaré un attribut de classe comme moi je l'ai fait, et non pas comme une variable dans le constructeur du Form1 ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Mon main est bien dans le fichier Program (pour être exact Program.cs).
    Par contre, j'ai déclaré mes objets avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donnees objet1 = new donnees();
    J'ai cependant essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static donnees objet1;
    , mais j'obtiens des erreurs.

    Actuellement j'ai réussis à faire passer mon objet en entrée dans mon Form, donc dans le Form je peux y accéder :
    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
    27
    28
    29
    30
    31
    32
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1(donnees objet1)
            {
                InitializeComponent();
                // ici j'ai accès au contenu de objet1
            }
     
            public void Form1_Load(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
                // ici je n'arrive pas à y accéder
            }
        }
    }
    Par contre, dans la partie du timer (indiquée en commentaire), je ne peux pas accéder à mon objet. Je n'arrive pas non plus à le mettre en entrée comme je l'ai fait pour le form, par ce qu'il me refuse tout nouvel argument.

    Et oui, mon code main est
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                donnees objet1 = new donnees();
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                // lancement interface graphique
                Application.Run(new Form1(config));
     
            }
        }
    }

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    OK on y est presque !
    D'abord une petite remarque : dans ta méthode Main(), tu déclares une variable "objet1", mais tu transmets une variable "config" dans le constructeur de Form1() ?!

    Sinon, le code de ton formulaire doit ressembler à ceci :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
     
            // ICI...
            private donnees myObject; // ceci est un attribut de classe ; cette variable est accessible dans toute la classe, mais pas en dehors (private)
     
            public Form1(donnees objet1)
            {
                InitializeComponent();
                // ici j'ai accès au contenu de objet1
                // ... ET ICI
                myObject = objet1; // on renseigne myObject avec ce que tu as en paramètre de ta méthode
            }
     
            public void Form1_Load(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                label13.Text = DateTime.Now.ToString();
                // ici je n'arrive pas à y accéder
                // ENFIN, ici on a accès à myObject
            }
        }
    }

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup !!!

    Ça fonctionne !

    Je ne vois toujours pas pourquoi mes objets n'arrivent pas à passer en entrée, mais au moins ca fonctionne !!! Grace à toi

    Encore merci !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    De rien, le forum est là pour ça !
    Par contre je te conseille fortement de lire quelques tutoriels sur les bases de la programmation objet

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Bin pour les tutos... J'ai les cours et tutoriels C# à lire....

    Encore merci

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

Discussions similaires

  1. Ajouter une classe à une classe
    Par benooo dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 05/02/2014, 18h22
  2. passage des variables d'une classe à une autre
    Par zibou7 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2007, 16h46
  3. Réponses: 2
    Dernier message: 30/12/2006, 13h34
  4. passage d'une classe à une autre
    Par Gibou dans le forum C++
    Réponses: 17
    Dernier message: 18/06/2006, 15h14
  5. Passage de paramètre d'une classe à une autre
    Par semenzato dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2005, 13h59

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