Cette documentation est archivée et n’est pas conservée.

ToolStripProgressBar, classe

Mise à jour : novembre 2007

Représente un contrôle de barre de progression Windows contenu dans StatusStrip.

Espace de noms :  System.Windows.Forms
Assembly :  System.Windows.Forms (dans System.Windows.Forms.dll)

public class ToolStripProgressBar : ToolStripControlHost
public class ToolStripProgressBar extends ToolStripControlHost
public class ToolStripProgressBar extends ToolStripControlHost

ToolStripProgressBar est le ProgressBar optimisé pour l'hébergement dans un ToolStrip. Un sous-ensemble des propriétés et événements du contrôle hébergé est exposé au niveau ToolStripProgressBar, mais le contrôle ProgressBar sous-jacent est totalement accessible via la propriété ProgressBar.

Un contrôle ToolStripProgressBar affiche l'avancement d'une opération de longue durée. Le contrôle ToolStripProgressBar affiche une barre qui se remplit de gauche à droite dans la couleur de mise en évidence du système au fur et à mesure qu'une opération progresse.

Remarque :

Le contrôle ToolStripProgressBar ne peut être orienté qu'horizontalement.

Le contrôle ToolStripProgressBar est en règle générale utilisé lorsqu'une application exécute des tâches telles que la copie de fichiers et l'impression de documents. En l'absence d'indicateur visuel, les utilisateurs d'une application risquent de penser qu'elle ne répond pas. Utilisez ToolStripProgressBar pour alerter l'utilisateur que l'application effectue une tâche de longue durée et que l'application répond toujours.

Les propriétés Maximum et Minimum définissent la plage de valeurs qui représentent la progression d'une tâche. La valeur attribuée à la propriété Minimum est zéro et celle qui est attribuée à la propriété Maximum indique la fin de la tâche. Par exemple, pour afficher correctement la progression de la copie d'un groupe de fichiers, la valeur à affecter à la propriété Maximum pourrait être le nombre total de fichiers à copier. La propriété Value représente la progression de l'application dans l'accomplissement de l'opération. Comme la barre affichée est une collection de blocs, la valeur affichée par ToolStripProgressBar est seulement une approximation de la valeur actuelle de la propriété Value. Sur base de la taille de ToolStripProgressBar, la propriété Value détermine l'emplacement du bloc suivant.

Il existe de nombreuses autres manières de modifier la valeur affichée par ToolStripProgressBar que de changer directement la propriété Value. Vous pouvez utiliser la propriété Step pour définir une valeur d'incrément spécifique de la propriété Value, puis appeler la méthode PerformStep pour incrémenter la valeur. Pour faire varier la valeur d'incrément, vous pouvez utiliser la méthode Increment et spécifier une valeur d'incrément de la propriété Value.

ToolStripProgressBar remplace l'ancien contrôle ProgressBar qui est néanmoins conservé pour la compatibilité descendante.

L'exemple de code suivant montre un ToolStripProgressBar qui calcule une séquence de nombres de Fibonacci.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.ComponentModel;

class FibonacciNumber : Form
{
	[STAThread]
	static void Main()
	{
		Application.EnableVisualStyles();
		Application.Run(new FibonacciNumber());
	}

	private StatusStrip progressStatusStrip;
	private ToolStripProgressBar toolStripProgressBar;
	private NumericUpDown requestedCountControl;
	private Button goButton;
	private TextBox outputTextBox;
	private BackgroundWorker backgroundWorker;
	private ToolStripStatusLabel toolStripStatusLabel;
	private int requestedCount;

	public FibonacciNumber()
	{
		Text = "Fibonacci";
		
		// Prepare the StatusStrip.
		progressStatusStrip = new StatusStrip();
		toolStripProgressBar = new ToolStripProgressBar();
		toolStripProgressBar.Enabled = false;
		toolStripStatusLabel = new ToolStripStatusLabel();
		progressStatusStrip.Items.Add(toolStripProgressBar);
		progressStatusStrip.Items.Add(toolStripStatusLabel);

		FlowLayoutPanel flp = new FlowLayoutPanel();
		flp.Dock = DockStyle.Top;

		Label beforeLabel = new Label();
		beforeLabel.Text = "Calculate the first ";
		beforeLabel.AutoSize = true;
		flp.Controls.Add(beforeLabel);
		requestedCountControl = new NumericUpDown();
		requestedCountControl.Maximum = 1000;
		requestedCountControl.Minimum = 1;
		requestedCountControl.Value = 100;
		flp.Controls.Add(requestedCountControl);
		Label afterLabel = new Label();
		afterLabel.Text = "Numbers in the Fibonacci sequence.";
		afterLabel.AutoSize = true;
		flp.Controls.Add(afterLabel);
		
		goButton = new Button();
		goButton.Text = "&Go";
		goButton.Click += new System.EventHandler(button1_Click);
		flp.Controls.Add(goButton);

		outputTextBox = new TextBox();
		outputTextBox.Multiline = true;
		outputTextBox.ReadOnly = true;
		outputTextBox.ScrollBars = ScrollBars.Vertical;
		outputTextBox.Dock = DockStyle.Fill;

		Controls.Add(outputTextBox);
		Controls.Add(progressStatusStrip);
		Controls.Add(flp);

		backgroundWorker = new BackgroundWorker();
		backgroundWorker.WorkerReportsProgress = true;
		backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
		backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
		backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
		
	}

	private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
	{
		// This method will run on a thread other than the UI thread.
		// Be sure not to manipulate any Windows Forms controls created
		// on the UI thread from this method.
		backgroundWorker.ReportProgress(0, "Working...");
		Decimal lastlast = 0;
		Decimal last = 1;
		Decimal current;
		if (requestedCount >= 1)
		{ AppendNumber(0); }
		if (requestedCount >= 2)
		{ AppendNumber(1); }
		for (int i = 2; i < requestedCount; ++i)
		{
			// Calculate the number.
			checked { current = lastlast + last; }
			// Introduce some delay to simulate a more complicated calculation.
			System.Threading.Thread.Sleep(100);
			AppendNumber(current);
			backgroundWorker.ReportProgress((100 * i) / requestedCount, "Working...");
			// Get ready for the next iteration.
			lastlast = last;
			last = current;
		}


		backgroundWorker.ReportProgress(100, "Complete!");
	}

	private delegate void AppendNumberDelegate(Decimal number);
	private void AppendNumber(Decimal number)
	{
		if (outputTextBox.InvokeRequired)
		{ outputTextBox.Invoke(new AppendNumberDelegate(AppendNumber), number); }
		else
		{ outputTextBox.AppendText(number.ToString("N0") + Environment.NewLine); }
	}
	private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
	{
		toolStripProgressBar.Value = e.ProgressPercentage;
		toolStripStatusLabel.Text = e.UserState as String;
	}

	private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
	{
		if (e.Error is OverflowException)
		{ outputTextBox.AppendText(Environment.NewLine + "**OVERFLOW ERROR, number is too large to be represented by the decimal data type**"); }
		toolStripProgressBar.Enabled = false;
		requestedCountControl.Enabled = true;
		goButton.Enabled = true;

	}

	private void button1_Click(object sender, EventArgs e)
	{
		goButton.Enabled = false;
		toolStripProgressBar.Enabled = true;
		requestedCount = (int)requestedCountControl.Value;
		requestedCountControl.Enabled = false;
		outputTextBox.Clear();
		backgroundWorker.RunWorkerAsync();
	}
}


Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0
Afficher: