Comment créer une barre de progression lisse dans Visual C#

Traductions disponibles Traductions disponibles
Numéro d'article: 323116 - Voir les produits auxquels s'applique cet article
Pour une version de Microsoft Visual Basic .NET de cet article, voir 323088.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment créer un simple et personnalisé ContrôleUtilisateur (UserControl) pour créer un régulièrement, défilement contrôle ProgressBar .

Dans les versions antérieures du contrôle ProgressBar , comme la version qui est fourni avec le contrôle ActiveX contrôles communs du Microsoft Windows, vous pouvez afficher la progression dans les deux vues différentes. Pour contrôler ces affichages, vous utilisez la propriété défilement , qui inclut des paramètres standard et lisses. Le défilement régulier génère un bloc solid de couleur qui représente l'état d'avancement et standard de défilement apparaît segmenté et se compose d'une série de petits blocs ou des rectangles.

Le contrôle ProgressBar qui est inclus avec Microsoft Visual C# prend en charge uniquement le paramètre standard.

Le code d'exemple dans cet article illustre comment créer un contrôle qui prend en charge les propriétés suivantes :
  • minimum . Cette propriété obtient ou définit la valeur inférieure de la plage de valeurs valides pour le cours. La valeur par défaut de cette propriété est zéro (0); vous ne pouvez pas définir cette propriété une valeur négative.
  • maximum . Cette propriété obtient ou définit la valeur supérieure de la plage de valeurs valides pour le cours. La valeur par défaut de cette propriété est 100.
  • valeur . Cette propriété obtient ou définit le niveau actuel de progression. La valeur doit être dans la plage que le minimum et maximum propriétés définissent.
  • ProgressBarColor . Cette propriété obtient ou définit la couleur de la barre de progression.

Créer un contrôle ProgressBar personnalisé

  1. Procédez comme suit pour créer un nouveau projet de bibliothèque de contrôles Windows Visual C# :
    1. Démarrez Microsoft Visual Studio.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
    3. Dans la boîte de dialogue Nouveau projet , cliquez sur Visual C# sous types de projet , puis cliquez sur Bibliothèque de contrôles Windows Forms sous modèles .

      note Dans Visual Studio .NET 2003, cliquez sur projets Visual C# à la place de Visual C# .
    4. Dans la zone Nom , tapez SmoothProgressBar et puis cliquez sur OK .
    5. Dans l'Explorateur de projets, renommer ce module de classe par défaut de UserControl1.cs à SmoothProgressBar.cs.
    6. Dans la fenêtre Propriétés de l'objet UserControl , modifier la propriété Name de UserControl1 à SmoothProgressBar .
  2. À ce stade, vous généralement hérite de la classe de contrôle et puis ajoutez la fonctionnalité supplémentaire pour étendre un contrôle existant. Cependant, la classe ProgressBar est sealed et ne peuvent pas être héritée. Par conséquent, vous devez créer le contrôle à partir du début.

    Ajoutez le code suivant au fichier SmoothProgressBar.cs, dans la classe dérivée de UserControl.

    note Dans Visual Studio .NET 2003, ajoutez le code au module de classe de la classe UserControl dérivée, juste après la section ? code concepteur de formulaires Windows généré ?.
    int min = 0;	// Minimum value for progress range
    int max = 100;	// Maximum value for progress range
    int val = 0;		// Current progress
    Color BarColor = Color.Blue;		// Color of progress meter
    
    protected override void OnResize(EventArgs e)
    {
    	// Invalidate the control to get a repaint.
    	this.Invalidate();
    }
    
    protected override void OnPaint(PaintEventArgs e)
    {
    	Graphics g = e.Graphics;
    	SolidBrush brush = new SolidBrush(BarColor);
    	float percent = (float)(val - min) / (float)(max - min);
    	Rectangle rect = this.ClientRectangle;
    
    	// Calculate area for drawing the progress.
    	rect.Width = (int)((float)rect.Width * percent);
    
    	// Draw the progress meter.
    	g.FillRectangle(brush, rect);
    
    	// Draw a three-dimensional border around the control.
    	Draw3DBorder(g);
    
    	// Clean up.
    	brush.Dispose();
    	g.Dispose();		
    }
    
    public int Minimum
    {
    	get
    	{
    		return min;
    	}
    
    	set
    	{
    		// Prevent a negative value.
    		if (value < 0)
    		{
    			min = 0;
    		}
    		
    		// Make sure that the minimum value is never set higher than the maximum value.
    		if (value > max)
    		{
    			min = value;
    			min = value;
    		}
    		
    		// Ensure value is still in range
    		if (val < min)
    		{
    			val = min;
    		}
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    public int Maximum
    {
    	get
    	{
    		return max;
    	}
    
    	set
    	{
    		// Make sure that the maximum value is never set lower than the minimum value.
    		if (value < min)
    		{
    			min = value;
    		}
    
    		max = value;
    
    		// Make sure that value is still in range.
    		if (val > max)
    		{
    			val = max;
    		}
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    public int Value
    {
    	get
    	{
    		return val;
    	}
    
    	set
    	{
    		int oldValue = val;
    
    		// Make sure that the value does not stray outside the valid range.
    		if (value < min)
    		{
    			val = min;
    		}
    		else if (value > max)
    		{
    			val = max;
    		}
    		else
    		{
    			val = value;
    		}
    
    		// Invalidate only the changed area.
    		float percent;
    
    		Rectangle newValueRect = this.ClientRectangle;
    		Rectangle oldValueRect = this.ClientRectangle;
    
    		// Use a new value to calculate the rectangle for progress.
    		percent = (float)(val - min) / (float)(max - min);
    		newValueRect.Width = (int)((float)newValueRect.Width * percent);
    
    		// Use an old value to calculate the rectangle for progress.
    		percent = (float)(oldValue - min) / (float)(max - min);
    		oldValueRect.Width = (int)((float)oldValueRect.Width * percent);
    
    		Rectangle updateRect = new Rectangle();
    		
    		// Find only the part of the screen that must be updated.
    		if (newValueRect.Width > oldValueRect.Width)
    		{
    			updateRect.X = oldValueRect.Size.Width;
    			updateRect.Width = newValueRect.Width - oldValueRect.Width;
    		}
    		else
    		{
    			updateRect.X = newValueRect.Size.Width;
    			updateRect.Width = oldValueRect.Width - newValueRect.Width;
    		}
    
    		updateRect.Height = this.Height;
    
    		// Invalidate the intersection region only.
    		this.Invalidate(updateRect);
    	}
    }
    
    public Color ProgressBarColor
    {
    	get
    	{
    		return BarColor;
    	}
    
    	set
    	{
    		BarColor = value;
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    private void Draw3DBorder(Graphics g)
    {
    	int PenWidth = (int)Pens.White.Width;
    
    	g.DrawLine(Pens.DarkGray, 
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top));
    	g.DrawLine(Pens.DarkGray,
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Top), 
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth));
    	g.DrawLine(Pens.White,
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth), 
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    	g.DrawLine(Pens.White,
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top), 
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    } 
    					
  3. Dans le menu Générer , cliquez sur Générer la solution afin de compiler le projet.

Créer une application client exemple

  1. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
  2. Dans la boîte de dialogue Ajouter un nouveau projet , cliquez sur Visual C# sous types de projet , cliquez sur Windows Forms application sous modèles et puis cliquez sur OK .

    note Dans Visual Studio .NET 2003, cliquez sur projets Visual C# à la place de Visual C# .
  3. Suivez ces étapes pour ajouter deux instances du contrôle SmoothProgressBar au formulaire :
    1. Dans le menu Outils , cliquez sur Choisir des éléments de boîte à outils .

      note Dans Visual Studio .NET 2003, cliquez sur Personnaliser la boîte à outils au lieu de Choisir des éléments de boîte à outils .
    2. Cliquez sur l'onglet composants .NET Framework .
    3. Cliquez sur Parcourir et recherchez le fichier SmoothProgressBar.dll, qui vous avez créé dans la section « Create a custom ProgressBar control ».
    4. Cliquez sur OK . Remarquez que le contrôle SmoothProgressBar est ajouté à la boîte à outils.
    5. Faites glisser deux instances du contrôle SmoothProgressBar à partir de la boîte à outils vers le formulaire par défaut du projet d'application Windows.
  4. Faites glisser un contrôle Timer de la boîte à outils vers le formulaire.
  5. Ajoutez le code suivant à l'événement trait du contrôle Timer :
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. Faites glisser un contrôle bouton de la boîte à outils vers le formulaire.
  7. Ajoutez le code suivant à l'événement Click du contrôle de bouton :
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. Dans le menu Déboguer , cliquez sur Démarrer pour exécuter l'exemple de projet.
  9. Cliquez sur le bouton. Notez que les indicateurs de progression deux afficher le texte « cours ». Un indicateur de progression affiche la progression d'une manière croissante et l'autre indicateur de progression affiche la progression dans une diminution ou une manière de compte à rebours.

Propriétés

Numéro d'article: 323116 - Dernière mise à jour: vendredi 1 août 2008 - Version: 4.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
Mots-clés : 
kbmt kbsweptvs2008 kbhowtomaster KB323116 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 323116
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com