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 :

GetFields sur textBox crées dynamiquement


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut GetFields sur textBox crées dynamiquement
    Bonjour,

    En le faisans court : je n'arrive pas a retrouver par réflection les champs crées dynamiquements.

    En le faisant long :

    Supposons que j'ai un textBox (txtBox) sur une winfomrs- dans ma winforms je joue le code de reflection suivant :

    =============================================
    Type MesTypes = this.GetType();
    MemberInfo[] MyMemberInfoArray = MesTypes.GetFields(BindingFlags.Instance
    | BindingFlags.NonPublic
    | BindingFlags.Public
    );

    ...
    ==============================================

    Dans MyMemberInfoArray j'ai bien txtBox. (je le vois en parcourant le tableau et en l'affichant dans la console)

    Maintenant si dans le constructeur de la classe je rajoute

    ==============================================
    TextBox MyTextBox = new System.Windows.Forms.TextBox();
    MyTextBox.Location = new System.Drawing.Point(50, 50);
    MyTextBox.Name = "txtBox";
    MyTextBox.Size = new System.Drawing.Size(130, 20);
    this.Controls.Add(MyTextBox);
    ==============================================

    J'ai bien une nouvelle textBox présente dans mon formulaire mais il n'est pas recensé par le this.GetFields (en ayant joué le même this.getType avant)

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    MyTextBox n'est pas un membre de la classe, c'est une variable locale, elle n'est donc pas accessible par réflexion.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut
    Merci pour votre réponse.

    je fais donc peut être fausse route. Mon souci est d'accéder à des valeurs d'un champ crée dynamiquement.

    Supposons que je crée un textBox dynamiquement à partir d'un nom précisé dans une interface comment (jusque là je sais faire).
    Je remplis le textbox crée

    comment récupérer la valeur de ce champ ?


    merci encore

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    si ta textbox est visible sur la form, elle est referencé dans this.Controls, donc un coup de reflection dessus (ou directement selon les contraintes), et tu auras un ControlCollection (plus sur du nom, enfin bon une collection de controls =p), dans laquelle tu pourras chercher ta textbox.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut
    Je ne pense pas que le text box que l'on rajoute dans le constructeur soit une variable locale. On le déclare dans la méthode (donc là c'est une variable locale), mais à la fin on le rajoute dans le controle (Controls.add...)

    En essayant la suggestion de faire une réflection sur le control lui même (this.Controls.GetType() plutot que this.getType() j'ai exactement la même chose) (merci pour l'idée)

    Peut être n'est il tout simplement pas possible de rajouter des champs en dynamique à une classe (j'ai une classe A avec un champ a, je l'instancie et je rajoute un champ b).

    Mais si c'est le cas à quoi sert cette fichue fonction méthode Add ? Si tout est objet j'ai bien un membre qui est rajouté quelque part....je nage...je nage...

    Merci de votre sollicitude.

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    J'ai l'impression que tu confonds deux choses : les champs d'une classe, et les objets d'un conteneur.
    Il se trouve que dans le cas des winform générées par le designer, ces deux concepts se recouvrent : quand on ajoute une textbox dans le designer à une form, une variable membre est créée (this.textbox1), et elle est ensuite ajoutée à une liste propre à la form (this.Controls). Mais d'un point de vue POO, c'est complètement différent

    Donc, tu n'as aucun besoin de parcourir les membres de ta classe Form. Parcourir les éléments de taForm.Controls doit largement suffire. Parce que s'il est (probablement) possible par réflexion, d'ajouter des champs dynamiquement, c'est un peu too much par rapport à ton besoin, qui n'est que de créer des instances (de contrôles en l'occurrence) et y accéder.

Discussions similaires

  1. Interagir sur élément crée dynamiquement
    Par derzy971 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/03/2010, 08h00
  2. [VBA-E 2000]Evènement Enter sur TextBox créé dynamiquement
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/04/2007, 23h00
  3. [C#] Récupérer le texte de textBox créées dynamiquement
    Par cyllix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/06/2006, 11h45
  4. Réponses: 1
    Dernier message: 25/04/2006, 16h22
  5. Réponses: 5
    Dernier message: 06/03/2006, 17h38

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