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 :

[C#] vider tableLayoutPanel sous visual studio 2010


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
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut [C#] vider tableLayoutPanel sous visual studio 2010
    bonsoir à tous,

    voila j'ai un tableLayoutPanel sur 6 colonne, j'ai utiliser ce genre de code pour le remplir :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    ArrayList tab = new ArrayList();
    tab = m_session.m_donneePartieEnCours;
     
      //*//
    int i = 1;
      foreach (string[] partie in tab)
      {
          string id = partie[0];
          string buyin = partie[1];
          string tpsDeJeu = partie[2];
          string nbMain = partie[3];
          string pourcMain = partie[4];
     
          Label LBL_SESSION_ENCOURS_ID = new Label();
          LBL_SESSION_ENCOURS_ID.Text = id;
     
          Label LBL_SESSION_ENCOURS_BUYIN = new Label();
          LBL_SESSION_ENCOURS_BUYIN.Text = buyin;
     
          Label LBL_SESSION_ENCOURS_TPSDEJEU = new Label();
          LBL_SESSION_ENCOURS_TPSDEJEU.Text = tpsDeJeu;
     
          Label LBL_SESSION_ENCOURS_NBMAIN = new Label();
          LBL_SESSION_ENCOURS_NBMAIN.Text = nbMain;
     
          Label LBL_SESSION_ENCOURS_POURCMAIN = new Label();
          LBL_SESSION_ENCOURS_POURCMAIN.Text = pourcMain;
     
           Label LBL_SESSION_ENCOURS_FORME = new Label();
           LBL_SESSION_ENCOURS_FORME.Text = " ";
     
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_ID, 0, i);
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_BUYIN, 1, i);
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_TPSDEJEU, 2, i);
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_NBMAIN, 3, i);
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_POURCMAIN, 4, i);
           TLP_SESSION_PARTIENCOURS.Controls.Add(LBL_SESSION_ENCOURS_FORME, 5, i);
     
    i++;     
    }
    //*/
    en gros mon arrayList contient une liste de tableau, chaque tableau correspond à une ligne de mon tableLayoutPanel, je récupère les infos de chaque tableau, je créer les label et je les ajoute au tableLayoutPanel, ce code fonctionne mon "panel" ce rempli bien.

    - en premier lieu j'aimerais votre avis sur ce code voir si vous auriez utiliser un tableLayoutPanel ou si vous auriez proceder autrement (faut savoir que j'y connai rien a rien pour l'instant)

    - en second ce code va s executer toutes les 30 seconde afin de mettre a jour si de nouvelle lignes apparaissent et c'est la que j'ai un souci!! (les lignes "s'additionne" au lieu de se "rafraichir" et ensuite plus rien ne correspond les lignes les colonnes c le brouillard)
    je pense qu'il faudrait que je vide mon tableLayoutPanel avant chaque "rafraichissement" mais voila je ne sais pas comment "vider" le tableLayout ...

    si quelqu'un a une idée j'en serai ravi

    merci

    ps : si jamais j'ai eu du mal a m'exprimer .... demander moi des precision car je manque de terme technique pour l'instant ...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pleasurnpain Voir le message
    - en premier lieu j'aimerais votre avis sur ce code voir si vous auriez utiliser un tableLayoutPanel ou si vous auriez proceder autrement (faut savoir que j'y connai rien a rien pour l'instant)
    1. Tu réinventes la roue... il y a des contrôles standards pour afficher des données sous forme de grille, comme le DataGridView.

    2. A moins que tu travailles en .NET 1.0 ou 1.1, évite d'utiliser des collections non typées comme ArrayList. Utilise plutôt des collections génériques comme List<T>, qui garantissent que la collection ne contiendra jamais un objet d'un type autre que T. En plus ça évite d'avoir à faire des casts, vu que le compilateur connait le type des éléments

    3. Evite d'utiliser des tableaux pour stocker des données hétérogènes ("case" 0 = id, case 1 = buyin, etc...). Imagine que ce code ait été écrit par quelqu'un d'autre et que tu doives le reprendre : tu n'aurais aucune idée de quelle case du tableau correspond à quoi... Définis plutôt des types dédiés aux données qu'ils représentent.

    4. Utilise des types spécifiques (int, double, DateTime, string...) plutôt que d'utiliser des chaines pour tout


    Pour commencer, je te suggère de créer une classe Partie, que tu utiliseras à la place des tableaux :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Partie
    {
        public int Id { get; set; }
        public double BuyIn { get; set; }
        // TimeSpan représente un intervalle de temps :
        public TimeSpan TempsDeJeu { get; set; }
     
        // Trouve des noms plus clairs, là c'est difficile de deviner ce que ça veut dire...
        public int NbMain { get; set; }
        public double PourcMain { get; set; }
    }


    Ensuite, remplace ton ArrayList par une List<Partie>, et remplace partie[0] par partie.Id, partie[1] par partie.BuyIn, etc.

    Rien qu'avec ces changements le code sera déjà plus clair et plus robuste... En plus ce sera beaucoup plus facile d'afficher les données dans un DataGridView, grâce au data binding. En gros il suffira de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridViewParties.DataSource = tab;
    (en personnalisant éventuellement les colonnes à l'aide du designer)

    Citation Envoyé par pleasurnpain Voir le message
    je pense qu'il faudrait que je vide mon tableLayoutPanel avant chaque "rafraichissement" mais voila je ne sais pas comment "vider" le tableLayout ...
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    TLP_SESSION_PARTIENCOURS.Controls.Clear();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut
    à vrai dire j'ai déjà une classe partie, j'ai fait pas mal de choses mais cela ne fait que trois semaines que je fais du C#, donc la j'étais en train de bricoler sur un tableLayoutPanel ..... très intéressant ce que tu raconte c'est ce que je voulais entendre en fait et c'est des choses que j'ai plus ou moins lu, je vais devoir maintenant les mettre en application

    je vous fais le tour de tout ça et je reviens dés que j'ai des question ..... et j'en aurai!!!


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut
    voila donc j'ai fait un peu le tour de tout ça, ça à l'air très propre et performant mais je t avouerai que de mon coté je suis vite à court d'imagination pour l'instant tant que j'aurai pas utiliser quelque "généric".

    pour t'expliquer j'ai une windows Form "FenetreSession" qui une fois ouverte instancie ma class "Session", dans celle ci je fais le tour d'un dossier qui contient mes parties que je récupère comme ça dorénavant :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    // j'ai dabord creer mes 5 list ..
     
    List<long> m_listIdPartie;
    public List<long> ListIdPartie
    {
         get { return m_listIdPartie; }
          set { m_listIdPartie = value; }
    }
     
    etc etc etc .......... plus bas ...
     
    while (tant que je lit des parties) ...
    {
       Partie m_partie = new Partie(m_bdd, m_sessionId);
     
       // on traite les données de la partie
       m_partie.TraitementDonneePartieEnCours(sourcePath);
     
       m_listIdPartie = new List<long>();
       m_listIdPartie.Add(m_partie.IdPartie);
     
       m_listBuyin = new List<double>();
       m_listBuyin.Add(m_partie.Buyin);
     
       m_listTpsDeJeu = new List<TimeSpan>();
       m_listTpsDeJeu.Add(m_partie.TpsDeJeu);
     
       m_listNbMain = new List<int>();
       m_listNbMain.Add(m_partie.NbMain);
     
       m_listMoyMainJouer = new List<int>();
       m_listMoyMainJouer.Add(m_partie.MoyMainJouer);
    }
    donc en gros je fais appel a une fonction dans la class "Partie" qui traite les données de chaque partie (fichier ".txt") et ensuite je récupère chaque donnée dans 5 list (a vrai dire je suis pas convaincu .... du moins j'aurai aimer avoir une seule list<Partie> par exemple mais comme je t'ai dit mon imagination est limité pour l'instant).

    donc maintenant dans ma windows form "FenetreSession" j'ai une fonction qui me sert à l'affichage (qui est vide dorénavant )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void AfficheSessionPartieEnCours()
    {
     
    }
    dans lequel je dois mettre le code d'une autre list (par exemple list<Session>) dans lequel il y aurait toutes mes parties et après je les affiche dans le gridDataView.

    la première chose qui m'interpelle c'est le type "Session de List<Session> alors que mes données sont dans des list avec des types du genre (int, long, TimeSpan ...) j'aimerai vraiment comprendre....

    voila j'espère que c'est clair ..... le temps de trouver mon sommeil je vais continuer a réfléchir et à lire ......

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pleasurnpain Voir le message
    la première chose qui m'interpelle c'est le type "Session de List<Session> alors que mes données sont dans des list avec des types du genre (int, long, TimeSpan ...) j'aimerai vraiment comprendre....
    Il faut pas créer 5 listes... toutes ces données (id, buyin, etc) font partie du même objet, il faut les garder ensemble dans la classe Partie. Il te faut donc une seule liste de parties (List<Partie>)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut
    les données sont bien ensemble dans ma classe partie ...... mais je la créer ou la List<Partie> et comment je la creer ?

    j'ai peur de pas bien suivre .....

    qd je creer une List<Partie> à partir de ma classe "Session" (car toutes mes parties sont instancier dans "Session") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Partie m_partie = new Partie(m_bdd, m_sessionId);
     
     List<Partie> partie = new List<Partie>();
     partie.Add(m_partie.IdPartie);
     partie.Add(m_partie.Buyin);
    j'ai des problèmes avec les types de données ...... normal.

    il y a quelque chose qui m'échappe c'est pour ça que j'ai essayer de t'expliquer le fonctionnement de mes deux classes faudrait vraiment que tu me donne un exemple.

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

Discussions similaires

  1. [SP-2010] Développement Sharepoint sous Visual Studio 2010 Express
    Par diabli73 dans le forum SharePoint
    Réponses: 8
    Dernier message: 21/10/2010, 14h58
  2. Qt sous Visual Studio 2010
    Par ToToR_2000 dans le forum Qt
    Réponses: 2
    Dernier message: 30/09/2010, 18h10
  3. [Qt WebKit] Compilation sous Visual Studio 2010
    Par esteban dans le forum Moteurs Web
    Réponses: 8
    Dernier message: 25/09/2010, 15h37
  4. Silverlight 3 et 4 sous Visual Studio 2010
    Par sorry60 dans le forum Silverlight
    Réponses: 3
    Dernier message: 17/08/2010, 14h22
  5. Opengl sous Visual Studio 2010
    Par Ether_saturne dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/05/2010, 23h14

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