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 :

Meilleure manière d'afficher du texte


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut Meilleure manière d'afficher du texte
    Salut, je dispose d'une form composé de deux panels. Le panel de gauche contient une arborescence d'objets. Le panel de droite contient un affichage des caractéristiques de ces objets. Pour l'instant je charge les caractéristiques dans des labels. A chaque click de l'utilisateur sur un node de mon treeview, de nouvelles caractéristiques sont chargées depuis mon datatable. Mon problème est le temps d'affichage de ces informations. J'aimerais bien pouvoir afficher ces infos de manière instantanée, alors que pour l'instant il y a un battement le temps que les données se réinitialisent.
    C'est un problème d'optimisation de code ou j'utilise le mauvais composant?

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Optimisation.

    Ton panel de gauche, ca serait pas un Treeview par hasard ? Je vois pas bien comment il peut contenir une arborescence d'objet.

  3. #3
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Salut Mose.
    C'est effectivement un treeview qui contient les dénominations d'objets (ex: reférence d'une médicament, nom d'un client).

    Si c'est un problème d'optimisation, qu'est-ce que je pourrais améliorer dans mon code?

    Ce code permet de déterminer une ligne du datatable TableMedicaments. Cette ligne est indiquée dans le tag du node sur lequel l'utilisateur a cliqué. Les labels du panel de droite sont ensuite renseignés avec les champs correspondant.
    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
    public void TreeviewMedicament_MouseUp(object sender, MouseEventArgs e)
            {
                //On récupère le node sur lequel l'utilisateur a cliqué
                Point ClickPoint = new Point(e.X, e.Y);
                TreeNode ClickNode = TreeviewMedicament.GetNodeAt(ClickPoint);
     
                if (ClickNode != null)
                {
                    //Si l'utilisateur a cliquer sur un médicament
                    if (ClickNode.Parent != null)
                    {
                        String Tag = ClickNode.Tag.ToString();
                        String[] s = Tag.Split(new Char[] { ' ' });
                        Tag = s[0];
     
                        int Index = Convert.ToInt32(Tag);
                        DataRow row = TableMedicaments.Rows[Index - 1];
     
                        LblNomMedicament.Text = row["Médicament"].ToString();
                        LblCompositionMedicament.Text = row["Composition"].ToString();
                        LblContreIndicationsMedicament.Text = row["ContreIndications"].ToString();
                        LblEffetsSecondairesMedicament.Text = row["EffetsSecondaires"].ToString();
                        LblIndicationsMedicament.Text = row["Indications"].ToString();
                        LblStocksMedicament.Text = row["Stocks"].ToString();
                        if (row["Ordonnance"].ToString() == "0")
                        {
                            LblOrdonnanceMedicament.Text = "Non";
                        }
                        else
                        {
                            LblOrdonnanceMedicament.Text = "Oui";
                        }
                        lblPrixMedicament.Text = row["Prix"].ToString() + "€";
                        LblLaboratoireMedicament.Text = row["Laboratoire"].ToString();
                        LblRemboursementMedicament.Text = row["TauxRemboursement"].ToString() + "%";
                        lblCategorieMedicament.Text = row["Catégorie"].ToString();
                        LblTypeMedicament.Text = row["TypeMedicament"].ToString();
                    }
                }
            }

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    J'affirme : c'est un problème d'optimisation.
    Les contrôles n'ont rien à voir là dedans, sauf si tu joues avec leur paramètres et que tu as des effets de bord sur les Click ou MouseDown.

    Je ne comprend pas ce que tu as mis dans ton Tag.
    Pourquoi tu n'y colles pas directement ton DataRow ?

    Sinon perso je jouerai sur le SelectedNode pour récupérer le Node clické, plutôt que sur GetNodeAt.

    Enfin, je commenterai mon code beaucoup plus que ça
    C'est con mais de le voir écrit littéralement ça permet de mieux voir quand on fait de boulettes ou quand on se prend le chou pour rien.

  5. #5
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par Mose
    J'affirme : c'est un problème d'optimisation.
    Les contrôles n'ont rien à voir là dedans, sauf si tu joues avec leur paramètres et que tu as des effets de bord sur les Click ou MouseDown.
    Ce sont de simples labels, mais je les recentre dans un TableLayoutPanel après avoir modifier leurs textes.

    Citation Envoyé par Mose
    Je ne comprend pas ce que tu as mis dans ton Tag.
    Pourquoi tu n'y colles pas directement ton DataRow ?
    En fait j'utilise le Tag pour conserver en mémoire une référence unique de l'objet (Id_Client, Id_Médicament...) et d'autres champs que j'affiche dans un tooltip.

    Citation Envoyé par Mose
    Sinon perso je jouerai sur le SelectedNode pour récupérer le Node clické, plutôt que sur GetNodeAt.

    Enfin, je commenterai mon code beaucoup plus que ça
    C'est con mais de le voir écrit littéralement ça permet de mieux voir quand on fait de boulettes ou quand on se prend le chou pour rien.
    C'est modifié: j'ai transformé l'évênement en un 'NodeMouseClick' et j'ai ajouté des commentaires. En espérant que j'ai été plus clair sur mon code.

    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
            //Gestion des clicks sur le treeview
            public void TreeviewMedicament_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                //Si le Tag n'est pas nul (si on a bien cliqué sur un médicament
                if (e.Node.Tag.ToString() != null)
                {
     
                    //On récupère le Tag du node sélectionné
                    String Tag = e.Node.Tag.ToString();
                    //On récupère l'index du row contenu dans Tag (Tag = Index + " " + (Txt Infobulle))
                    String[] s = Tag.Split(new Char[] { ' ' });
                    Tag = s[0];
     
                    //On convertit le tag en numérique
                    int Index = Convert.ToInt32(Tag);
     
                    //On récupère la ligne correspondante du datatable TableMedicaments
                    DataRow row = TableMedicaments.Rows[Index - 1];
     
                    //On met àjour les labels
                    LblNomMedicament.Text = row["Médicament"].ToString();
                    LblCompositionMedicament.Text = row["Composition"].ToString();
                    LblContreIndicationsMedicament.Text = row["ContreIndications"].ToString();
                    LblEffetsSecondairesMedicament.Text = row["EffetsSecondaires"].ToString();
                    LblIndicationsMedicament.Text = row["Indications"].ToString();
                    LblStocksMedicament.Text = row["Stocks"].ToString();
                    if (row["Ordonnance"].ToString() == "0")
                    {
                        LblOrdonnanceMedicament.Text = "Non";
                    }
                    else
                    {
                        LblOrdonnanceMedicament.Text = "Oui";
                    }
                    lblPrixMedicament.Text = row["Prix"].ToString() + "€";
                    LblLaboratoireMedicament.Text = row["Laboratoire"].ToString();
                    LblRemboursementMedicament.Text = row["TauxRemboursement"].ToString() + "%";
                    lblCategorieMedicament.Text = row["Catégorie"].ToString();
                    LblTypeMedicament.Text = row["TypeMedicament"].ToString();
                }
            }
    Je trouve toujours l'affichage lent. Mais peut être suis-je trop exigeant?

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/10/2007, 17h00
  2. [TabControl] Afficher du texte en transparence
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/10/2004, 23h01
  3. Afficher du texte en couleur sous Borland C++ 4.02
    Par Cthulhu 22 dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/11/2003, 00h53
  4. afficher du texte
    Par Mau dans le forum OpenGL
    Réponses: 10
    Dernier message: 24/06/2003, 15h31
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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