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 :

c# ProgressBar avec du texte dedans


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut c# ProgressBar avec du texte dedans
    Bonjour,

    Apres des jours et des jours de recherche afin de crée un contrôle personnalisé progressbar avec du texte dedans, j'ai trouvé plein de morceau de code a droite a gauche mais rien de convenable ou fonctionnel au final.
    J'ai fini par développé un contrôle qui fonctionne bien.

    Je partage le code de l'objet afin que cela serve à d'autre et leur évite de galéré sur le net comme moi.

    En premier lieu dans le projet il faut crée un nouvelle class nommé TransparentLabel

    voila le code qu'il faut mettre dedans
    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
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace Custom_Control_Library
    {
        public class TransparentLabel : Control
        {
            public TransparentLabel() { TabStop = false; }
     
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x20;
                    return cp;
                }
            }
     
            protected override void OnPaintBackground(PaintEventArgs pevent) { }
     
            protected override void OnPaint(PaintEventArgs e)
            {
                using (SolidBrush TBrush = new SolidBrush(ForeColor))
                {
                    this.Width = (Int32)(e.Graphics.MeasureString(Text, Font).Width);
                    this.Height = (Int32)(e.Graphics.MeasureString(Text, Font).Height);
                    e.Graphics.DrawString(Text, Font, TBrush, -1, 0);
                }
            }
        }
    }
    Ensuite ajouter au projet un nouveau contrôle utilisateur nommé CustomProgressBar
    Definir la hauteur de la propriété Size a 23. Mettre dans la zone une ProgressBar dont la propriétés dock et réglé sur Fill.Puis un TransparentLabel crée par la classe précédente.

    enfin voila le code de l'objet CustomProgressBar
    (La ProgressBar est nommé PgsBar et le TranparentLabel TLbl)
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace Custom_Control_Library
    {
        public enum ProgressBarDisplayText
        {
            Percentage,
            CustomText
        }
     
        public partial class CustomProgressBar : UserControl
        {
            Int32 Percent = 0;
     
            // Constructor
            public CustomProgressBar()
            {
                // Modify the ControlStyles flags
                this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
                this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                InitializeComponent();
            }
     
            // Override the OnPaint event to set the correct position of Text
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                TLbl.Left = (Int32)((Double)((PgsBar.Width / 2) - (TLbl.Width / 2)));
                TLbl.Top = (Int32)((Double)((PgsBar.Height / 2) - (TLbl.Height / 2)));
                TLbl.Text = DisplayStyle == ProgressBarDisplayText.Percentage ? Percent.ToString() + " %" : CustomText;
                TLbl.Invalidate();
            }
     
            // Property to set to decide wheter to print a % or text
            public ProgressBarDisplayText DisplayStyle { get; set; }
     
            // Property to hold the custom text
            public String CustomText { get; set; }
     
            // Property  to access at ProgressBar Value property
            public Int32 Value
            {
                get { return PgsBar.Value; }
                set
                {
                    this.PgsBar.Value = value;
                    Percent = (Int32)(((Double)(PgsBar.Value - PgsBar.Minimum) / (Double)(PgsBar.Maximum - PgsBar.Minimum)) * 100);
                    TLbl.Text = DisplayStyle == ProgressBarDisplayText.Percentage ? Percent.ToString() + " %" : CustomText;
                    TLbl.Refresh();
                }
            }
     
            // Property to access at ProgressBar Minimum property
            public Int32 Minimum
            {
                get { return PgsBar.Minimum; }
                set { PgsBar.Minimum = value; }
            }
     
            // Property to access at ProgressBar Maximum property
            public Int32 Maximum
            {
                get { return PgsBar.Maximum; }
                set { PgsBar.Maximum = value; }
            }
        }
    }
    Voila, plus qu'a placé l'objet dans votre projet et hop voila une progressbar avec du texte dedans. Réglé la propriété DisplayStyle sur Percentage et vous avait le pourcentage de la bar qui s'affiche (calcule automatique en fonction de value, minimum et maximum) ou sur CustomText pour affiché sur Texte (Propriété CustomText de l'objet CustomProgressBar). La position du texte dans la ProgressBar est calculer automatiquement.

    En espérant que cela puisse servir.

    Nephi

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Très bonne idée et très sympa d'avoir partagé ... Je teste cela demain
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. Créer un fichier word avec image et texte dedans
    Par nocolach dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/07/2008, 00h19
  2. [DOM] DOM afficher un input avec du texte dedans
    Par NeHuS dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/01/2006, 22h41
  3. [HTML] problème avec un text area
    Par krfa1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/10/2004, 11h37
  4. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17
  5. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03

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