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 :

Quelle est la meilleure technique pour reprendre une collection d'un dialog ?


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut Quelle est la meilleure technique pour reprendre une collection d'un dialog ?
    Bonjour à tous,

    Tel que suggéré sur MSDN, la meilleure façon de récupérer des données des composants d'une autre Windows Form (par exemple, une boite de dialogue appelée par une autre form) est de créer une propriété qui retourne le composant désiré (TextBox, ListView, etc.).

    Donc, si à partir d'une form principale, j'affiche une autre form à l'utilisateur (avec ShowDialog()), et que je veux récupérer les informations des TextBox de cette dernière, je devrai créer une propriété pour chaque TextBox.

    J'ai beaucoup de classes collections dérivant de List<T>, et dans l'exemple suivant, je me demande comment est-ce mieux de retourner mes données à la Windows Form parent :

    1. La Windows Form parent affiche la Windows Form enfant, qui contient un ListView.

    2. Cette Windows Form enfant, aussitôt affichée, va chercher des éléments d'une base de données, et les affiche en tant qu'items à ce ListView.

    * Ici, je me serts d'une classe contrôle que j'ai créé au niveau de la base de données, qui me retourne mes données sous forme d'entités grâce à des classes et une collection que j'ai créés. Je me sert de la collection retournée pour créer mes ListViewItems et les ajouter au ListView *

    3. L'utilisateur peut ajouter ou détruire des éléments dans ce ListView.

    4. Une fois ses modifications terminées, je dois retourner les données à la Windows Form parent.

    Voilà ma question :

    Devrais-je accéder au ListView de la Windows Form enfant en créant une propriété retournant le ListView lui-même ?

    ou

    Devrais-je créer une méthode "get_MaCollection" dans ma Windows Form enfant, qui prendra chaque ListViewItem du ListView et rebâtira une nouvelle collection afin de la retourner à la form parent ?

    Je suis conscient que les deux techniques fonctionnent parfaitement bien. Cependant j'aimerais connaître la plus logique et celle qui m'évitera des soucis à long terme.

    Ma question en bref : est-ce mieux de retourner des classes entités explicitement créées ou bien est-ce mieux de retourner les composants eux-mêmes des Windows Form enfants (utilisant les propriétés) et de faire le traitement au niveau de la Windows Form parent ?

    Merci d'avance

  2. #2
    Membre actif Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Points : 284
    Points
    284
    Par défaut
    Bonjour

    Je sais pas si c'est ce que tu veux mais j'ai eu le meme cas et je m'en suis sorti grace aux evenements

    Exemple :
    Dans ta formEnfant :
    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
     
     
            public delegate void FormClose(List<String> maList);
            public event FormClose FormClosing;
     
            public FormEnfant()
            {
                InitializeComponent();
                this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormEnfant_FormClosed);
            }
     
            private void FormEnfant_FormClosed(object sender, FormClosedEventArgs e)
            {
                List<String> maList = new List<string>();
                FormClosing(maList);
            }
    et dans ta FormParent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            FormParent_ButtonFormEnfant_Click(object sender, EventArgs e)
            {
                 FormEnfant frmEnfant = new FormEnfant();
                 frmEnfant.FormClosing+=new FormEnfant.FormClose(frmEnfant _FormClosing);
                 frmEnfant.ShowDialog();
            }
            void frmEnfant _FormClosing(List<string> maList)
            {
                //Ton traitement
            }
    Enfin si je ne me trompe pas

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Il me parait bien plus sain d'exposer dans une propriété de ta form fille une liste d'objets métier plutôt que la ListView elle-même. La listview n'est qu'une représentation visuelle de tes objets,et la classe mère n'a aucune raison de la connaître. D'autant plus que si tu décides un jour d'utiliser un autre composant à la place.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class FormFille : Form
    {
    public List<ObjetMetier> Objets { get {return ...; } }
    }
     
    class FormMere : Form
    {
      using (FormFille f = new FormFille())
      {
        f.ShowDialog();
        maListe = f.Objets;
      }
    }
    ಠ_ಠ

  4. #4
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut
    C'est vrai qu'exposer le ListView peut être problématique à long terme si jamais je veux changer de composant pour l'affichage.

    Il est donc préférable d'exposer la classe entité. Merci je comprends bien. :-)

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

Discussions similaires

  1. [MVVM] quelle est la meilleure approche pour afficher une liste d'images ?
    Par SIC83 dans le forum Silverlight
    Réponses: 0
    Dernier message: 21/10/2012, 11h50
  2. Réponses: 1
    Dernier message: 21/02/2010, 08h42
  3. Réponses: 1
    Dernier message: 14/02/2009, 13h43
  4. [XML] Quelle est la meilleur technique pour créer un fichier XML? (erreur de caract)
    Par Jonathan.b dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 15/01/2008, 08h19
  5. Réponses: 3
    Dernier message: 09/05/2006, 15h16

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