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éder à des objets d'une Form à partir d'une classe


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Accéder à des objets d'une Form à partir d'une classe
    Bonjour,
    j'ai mis sur une Form des objets (ex: label, text).
    J'ai instancié un objet de type Maclass, et je lance un thread (module contenu dans ma classe).

    Ce thread doit changer le paramètre Text de mes objets.

    Comment faire ?

    J'ai essayé avec Invoke, mais sans résultat. Eviedemment, il n'est pas possible d'accéder depuis un thread aux objets d'un autre thread. Mais bon, quand je vois les exemples avec Invoke, j'arrive pas, par exemple, à écrire textBox1 dans ma classe, puisque cet objet a été créé dans Form
    J'ai essayé avec:
    - CurrentForm=Form.ActiveForm
    - CurrentForm.Controls["valeur correspondant à mon objet"].Text
    Ca marche à peu près, mais je ne peut pas iconifier ma fenêtre, car sinon Form.ActiveForm ne pointe plus sur mon application.

    Est-il possible que, depuis ma classe, je puisse accéder à des méthodes publiques de ma Form, auquel cas je me prépare des fonctions Get et Set dans ma Form pour accéder aux objets.

    Bon, comme vous l'avez surement remarqué, je suis débutant en VC#NET. Si vous avez des exemples à me montrer, ça serait très sympa.

    Merci encore

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Dans les propriété du composant en mode design tu as la propriété modifer et il suffit que tu la mette sur public pour pour pouvoir y acceder dans d'autre classe.

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Je pense que tu prends le problème du mauvais coté...

    En programmation d'application avec interface utilisateur (ie: IHM), on utilise
    souvent un modele (design pattern) qui avait été mis en place avec l'architecture Doc and View à l'époque des MFC (ya pas si longtemps).

    Le principe est le suivant :

    Les données et leur représentation sont distinctes (c ce que tu fais en mettant
    d'un coté, une classe avec les infos, de l'autre, l'IHM)

    Seulement, où cela change c'est que ce n'est pas aux données de mettre
    à jour l'IHM mais à l'IHM de venir se mettre à jour par rapport aux données...

    En effet, les données n'ont pas à savoir sous quelle forme elles sont représentés..

    Par rapport à ton système, tu pourrais mettre en place un Event soit pour chaque propriété, soit pour l'ensemble de ta classe....
    Cet evenement aurait pour abonner ton IHM. Ainsi, à chaque fois qu'une
    propriété changerait, l'IHM en serait prévenue...

    C'est pour moi la meilleure solution et la plus efficace en terme de séparation données/Interface.

    Voila...

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Membre habitué
    Avatar de crjo
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Octobre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 81
    Points : 132
    Points
    132
    Par défaut
    +1 themonz31

    Les données ne doivent pas être au courant de comment elles sont affichées. Tu risques vite de perdre la tête si c'est la classe représentant les données qui doit mettre à jour le form.

    Imagine que d'autres forms doivent afficher les mêmes données (mais avec une présentation différente)... tu vas devoir modifier ta classe de données pour gérer tous ces cas et c'est vite le bordel

    Je te conseille d'utiliser un modèle de conception (design pattern) de type "Observateur" (observer) pour faire ce que tu veux. Avec le système de délégués en C#, c'est assez facile à mettre en place.

    Recherche sur Google, ou demande les conseils avisés de l'équipe

  5. #5
    Membre émérite

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 2 624
    Points
    2 624
    Par défaut
    Observer, implémenté via le DataBinding en C# dans ton cas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  2. Réponses: 3
    Dernier message: 02/01/2009, 00h28
  3. Accèder les objets d'une form à partir d'une classe
    Par xyron_x dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/04/2007, 14h49
  4. Réponses: 3
    Dernier message: 02/04/2007, 20h37

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