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 :

accès a un attribut d'une mdi depuis les forms filles


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 12
    Points
    12
    Par défaut accès a un attribut d'une mdi depuis les forms filles
    Bonjour,
    je suis débutant en C# alors ma question va sans doute paraitre un peu "noob":
    je développe une application avec une fenetre principale MDI et plusieurs form a l'intérieur, j'ai un objet "connection" qui matérialise ma connection avec une base de donnée.
    Mon problème c'est que je voudrai que cet objet soit accessible partout dans l'appli, entre autre dans les forms.
    J'ai donc tenté de le déclarer en attibut de ma MDI et d'y accéder a partir des forms grace a l'attribut MdiParent en faisait this.MdiParent.connection mais impossible, mon objet reste invisible depuis les forms... pourquoi ?
    Avez vous une idée de l'endroit ou je pourrai déclarer mon objet pour que ca marche?

  2. #2
    Membre confirmé
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Points : 586
    Points
    586
    Par défaut
    ton attribut est déclarée en quoi ? private, public, protected ...


    Mosco

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    en public, c'est justement ca qui est bizarre normallement il est sensé etre visible....

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Si c'est public, ça devrait marcher.
    Sauf que...
    Si tes forms ne sont pas déclarées "Childs" de la mdi, la référence parent ne rendra rien. Tu peux facilement vérifier ce point en remplacant "this.MdiParent" par le vrai nom de la feuille mdi.

    Ensuite, pour rendre cette connection accessible dans toute l'appli, il y a d'autres solutions :
    - utiliser les "settings"
    - une que j'aime bien : stocker toutes ces variables globales dans une classe "private static" du projet.

    Voilou

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Alors,
    juste après avoir créé ma form fille (nouveau), je déclare la MDI comme étant son parent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    frmNouveau nouveau = new frmNouveau();
                nouveau.MdiParent = this;
    Et dans ma form nouveau il me trouve bien le nom de ma MDI mais malheureusement mes attributs publiques de la MDI restent invisible depuis la form...

    Par contre merci pour l'astuce de la classe statique , ca marche bien et c'est pratique, je pense que c'est la solution que je vais utiliser.

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Euh milles excuses je me suis trompé: dans la form fille il ne trouvait pas le nom de ma mdi ma mdi est anonyme en fait...

    Par contre j'ai essayé quelquechose et c'est vraiment étrange:

    au moment de créer ma form fille dans ma mdi je passe en paramètre du contructeur "this".
    dans ma form fille je fait une comparaison entre la référence de la mdi que j'ai obtenu en paramètre du constructeur et MdiParent : true
    => c'est donc bien le même objet

    mais a partir de la référence que j'ai passé en paramètre je suis capable d'accéder aux attributs publics de ma MDI et pas a partir de MdiParent...

    ... je pige rien

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    salut taaroa,
    je vais te proposer une approche peut-être plus simple c'est à toi de voir.
    (*) Tu dis que ton objet "connection" est utilisé pour interagir avec une bdd j'en déduis donc que tu as une série de traitements qui vont avec (genre insérer un enregistrement dans ta bdd).
    (*) Crée une classe dans laquelle tu mettras les objets qui te servent pour interagir avec ta bdd et déclare les public static. Ca te donne quelque chose comme ça:
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace TransparentControlsLibrary
    {
        public class Class1
        {
            //type int pour l'exemple
            public static int connection;
     
            public static void authenticate(string login, string pass)
            { 
                //traitement ici
            }
        }
    }
    (*) Dans un formulaire tu peux faire cet appel par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
            private void button1_Click(object sender, EventArgs e)
            {
                Class1.connection = 1;
                Class1.authenticate("toto", "tata");
            }
    Tout ça pour te montrer comment partager "proprement" des objets et autres dans ton application. Mais ce n'est pas suffisant. Alors continue de poster des messages et cherche il y a de bon tutoriels ici.

    Bonne continuation

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Merci bien

    Mais ca y est j'ai trouvé la solution de mon problème :

    pour avoir accès aux attributs de ma mdi il faut faire un cast sur MdiParent dans les forms filles.

    quand j'ai ajouté ma MDI a mon projet je lui ai donné le nom "fenetrePrincipale" donc toutes les instances sont de type fenetrePrincipale.

    la solution du problème est donc de faire le cast suivant pour avoir accès aux attributs:

    ((fenetrePrincipale)MdiParent).attributDeLaMdi


    Merci quand même a tous pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2009, 14h03
  2. Charger une image depuis les ressources projets
    Par Flackou dans le forum DirectX
    Réponses: 2
    Dernier message: 04/06/2007, 14h34
  3. Accéder à une méthode depuis un form
    Par the java lover dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/03/2007, 21h36
  4. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 21h03
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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