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 :

Comment faire pour avoir un objet accessible dans tous les formulaires?


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut Comment faire pour avoir un objet accessible dans tous les formulaires?
    bonjour,
    voila, j'ai un problème qui commence à devenir vraiment gênant !
    j'ai commencé un projet en programmation orienté objet en c#, et j'aimerais utiliser un objet sur plusieurs feuilles.
    malheureusement, je ne sais pas comment rendre un objet visible dans toute l'application.

    voici l'objet que j'aimerais instancier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void PagePrincipale_Load(object sender, EventArgs e)
    {
                ClClasseEleve uneClasse;
                uneClasse = new ClClasseEleve("1", "2SIN");
    }
    et j'aimerais l'utiliser dans d'autres feuilles.
    on m'a parlé des thread, mais j'ai rien compris u_u

    pourriez-vous me dire quelle méthode je pourrais utiliser s.v.p ?

  2. #2
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    tu veux ré-instancier ton objet? ou utiliser le même à chaque page?

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'aimerais utiliser le même dans chaque page

  4. #4
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    je sais pas si c'est possible de le faire, essaye de voir du côté de global.asax peut-être que tu peux implémenter un objet (mais je suis pas sur je ne m'en sers pas) ou alors, il te faut faire ton objet en static, mais, si ton appli est utilisé 2 fois les valeurs vont finir par se chevaucher et te donner des résultats inatendus.

    Cordialement.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    l'appli ne sera utilisée que par un seul poste, alors il n'y a pas de problème pour ça.
    j'ai essayé de mettre mon objet en static mais ça n'a pas marché, en même temps j'ai du mal, je suis tout nouveau en c# ^^

    pourrais-tu me montrer comment on met un objet en static stp ? je pourrais ainsi voir ou j'ai fais une erreur

    merci pour ta réponse

  6. #6
    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,

    toujours heureu de voir des apprentits

    avans de continuer, tu utilise bien C# dans une interface WinForm/WPF??

    car sous ASP.NET c'est une autre histoire


    donc grossomodo il faut essayer de visualiser ton programme comme un arbre geant dans la racine et le projet d'execution ensuite il peut decouler de cette racine des fenetre, des librairie, des classes et autre

    PS: pour mieu me comprendre(j'ai parfois du mal ) hesite pas a fair un petit dessin

    nous voulons qu'un objet soit accessible par toute les fenetres, il faut donc que notre objet se place très près de la racine

    niveau 1: racine
    niveau x: objet
    niveau > x : toute les fenetre
    il est donc obligatoire que notre objet ne soit pas contenu par nos fenetre ainsi ton code ne fonctionneras pas correctement.


    une variable ne peut etre stocker que dans une classe, il va donc nous falloir une nouvelle classe(que nous pourrons appeler "VariableGenerale") qui seras(par default, tu n'as rien a fair) reliè a la racine meme.

    le 2ème point est que tu ne veut qu'une seule instance, il faudras donc utiliser "static"

    Resultat:
    Tu doit ajouter une nouvelle classe a ton projet

    Celle ci contiendras le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static class ValeurGeneral
    {
       public static ClClasseEleve maClasse;
    }

    si jamais ces notions(static, structure du code) te sont fortement etrangere je te conseil de fair un tour a la section "tuto"

    http://dotnet.developpez.com/cours/?page=csharp


    EDIT: quand a sont utilisation, de n'importe ou tu tape "ValeurGeneral" puis tu met un point et la hop acces direct a ta variable

    pas besoin d'instancier la classe ValeurGeneral

    si tu a besoin de fair des control d'instance sur ta variable(fair le "new" une seul fois je te renvoy au cour sur les singleton)

    bon courage, C# est un puissant languague, ici tu auras de l'aider reguliere et serieuse, tu ne regretteras rien

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour ta réponse
    j'ai réalisé le diagramme UML, le voici :



    j'utilise bien les WindowsForm !

    bon alors en gros, tu me demandes de créer un nouveau WindowsForm et d'y coller ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static class ValeurGeneral
    {
       public static ClClasseEleve maClasse;
    }

    mais où puis-je instancier mon objet ?

    ensuite, tu me demandes de créer une nouvelle clase, tu parles bien du code précédent non ?
    Et comment puis-je appeler mon objet par la suite ?

  8. #8
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    C'est un singleton que tu veux.

    http://www.yoda.arachsys.com/csharp/singleton.html

    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
     
    public sealed class Singleton
    {
        static readonly Singleton instance=new Singleton();
     
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Singleton()
        {
        }
     
        Singleton()
        {
        }
     
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }

  9. #9
    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
    Pour avoir accès a un objet depuis n'importe quel WinForms

    1) ajouter une Classe (et non pas une WinForms)
    => click droit, ajouter une classe

    2) tu lui met le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static class ValeurGeneral
    {
       public static ClasseEleve maClasse;
       public static Utilisateur currentUser;
    }
    => prend garde a adapter le type de tes objet
    => tu peut placer autant d'objet que tu veut


    puis dans une WinForms quelconque tu peut accèdè a tes objet en tapant
    ensuite c'est a toi de gèrè se que tu stock dans tes variables

    il ne faut pas crèè d'instance de la classe ValeurGeneral


    CODE INTERDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValeurGeneral mesValeurs = new ValeurGeneral();

  10. #10
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour ce bout de code

    je viens d'essayer mais ça ne marche pas u_u
    lorsque j'ai généré la solution, il me dit :

    Erreur 1 Le type ou le nom d'espace de noms 'ClasseEleve' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?) C:\Users\Adam Kadamon\Desktop\carnet de notes\BulletinScolaire\BulletinScolaire\val.cs 13 27 BulletinScolaire


    Erreur 2 Le type ou le nom d'espace de noms 'Utilisateur' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?) C:\Users\Adam Kadamon\Desktop\carnet de notes\BulletinScolaire\BulletinScolaire\val.cs 14 27 BulletinScolaire


    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using ClassBulletin;
    using System.Collections;
     
    namespace BulletinScolaire
    {
        class val
        {
            public static class ValeurGeneral
            {
                public static ClasseEleve maClasse;
                public static Utilisateur currentUser;
            }
        }
    }
    je suppose que je devrais instancier l'objet aussi :

    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using ClassBulletin;
    using System.Collections;
     
    namespace BulletinScolaire
    {
        class val
        {
            public static class ValeurGeneral
            {
                public static ClasseEleve maClasse = new ClClasseEleve("1","2SIN");
                public static Utilisateur currentUser;
            }
        }
    }

  11. #11
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    un ami m'a dit qu'il était possible de faire passer facilement un objet par les formulaires MDI, justement j'utilise les formulaires MDi.

    j'ai trouvé un tuto sur csharp.com mais ça n'a pas fonctionné (comme d'hab quoi )

    je vais aussi garder en réserver l'astuce que vous m'avez donné, qui a l'air pas mal du tout.
    je vais essayer de faire marcher les deux en fait, ej vous tiens au courant

  12. #12
    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
    essay peut etre de lir tout simplement le message d'erreur ou de le taper dans google

    il te dit(le message):
    le type "ClasseEleve" et "Utilisateur" sont introuvable
    que ce passe t-il?
    1) ces 2 type n'existe pas! a tu crèè les classe nommè "ClasseEleve" et "Utilisateur"??
    2) rien dans les namespace referencer ne correspond!
    tes classes sont-elle dans le meme namespace que "ValeurGlobale"??


    soit tu met tes classe dans le meme namespace soit tu reference(grace a using) le namespace qui les contient


    sa confirme ce que j'ai dit plus haut, faut fonctionner sa par defit puis tu cour telecharger quelque tuto!!

    http://tahe.developpez.com/dotnet/csharp/

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    re,

    TheBlackReverand:
    soit tu met tes classe dans le meme namespace soit tu reference(grace a using) le namespace qui les contient
    j'ai utilisé un using mais rien n'a fonctionné >_<
    merci quand meme

    je viens tout juste de trouver ce qu'il me faut, enfin je pense.
    http://stephaneey.developpez.com/tut.../poo_winforms/

    voici un tutos que je viens de trouver sur le site, il correspond à ce que je souhaite faire, mais j'ai un peu de mal à l'adapter.

    connaitriez-vous ce tuto ?

    EDIT :

    En fait c'est ce que m'avait conseillé TheBlackReverand :
    mais je n'avais pas réussi à l'utiliser, je vais essayer de le faire marcher maintenant que j'ai un exemple ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2013, 19h36
  2. Réponses: 3
    Dernier message: 11/06/2012, 17h47
  3. comment faire pour avoir java-web dans mon netbeans
    Par titeufdev dans le forum NetBeans
    Réponses: 1
    Dernier message: 15/06/2011, 16h01
  4. Réponses: 1
    Dernier message: 25/06/2010, 07h38
  5. Réponses: 1
    Dernier message: 23/07/2007, 11h00

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