Questo argomento non è stato ancora valutato - Valuta questo argomento

Classe ToolStripProgressBar

Aggiornamento: novembre 2007

Rappresenta un controllo indicatore di stato di Windows contenuto in un oggetto StatusStrip.

Spazio dei nomi:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

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

ToolStripProgressBar è la classe ProgressBar ottimizzata per essere contenuta in una classe ToolStrip. Un sottoinsieme delle proprietà e degli eventi del controllo contenuto è esposto a livello della classe ToolStripProgressBar, ma il controllo ProgressBar sottostante è completamente accessibile tramite la proprietà ProgressBar.

Un controllo ToolStripProgressBar indica visivamente lo stato di un'operazione di lunga durata. Sul controllo ToolStripProgressBar è visualizzata una barra che viene riempita da sinistra a destra con il colore di evidenziazione del sistema durante l'avanzamento dell'operazione.

Nota:

Il controllo ToolStripProgressBar può essere orientato solo orizzontalmente.

Il controllo ToolStripProgressBar è in genere utilizzato quando si eseguono attività come la copia di file o la stampa di documenti. Se non vi sono indicatori visivi, l'utente può ritenere che l'applicazione non risponda. Utilizzare il controllo ToolStripProgressBar per notificare all'utente che l'applicazione sta eseguendo un'attività particolarmente lunga e che sta ancora rispondendo.

Le proprietà Maximum e Minimum definiscono l'intervallo di valori che rappresentano lo stato di una attività. La proprietà Minimum è in genere impostata su un valore uguale a zero, mentre la proprietà Maximum è in genere impostata su un valore che indica il completamento di una attività. Ad esempio, per visualizzare correttamente lo stato di avanzamento durante la copia di un gruppo di file, è possibile impostare la proprietà Maximum sul numero totale dei file da copiare. La proprietà Value rappresenta la percentuale di completamento dell'operazione da parte dell'applicazione. Poiché l'indicatore visualizzato nel controllo è un insieme di blocchi, il valore visualizzato dal controllo ToolStripProgressBar è solo un'approssimazione del valore corrente della proprietà Value. In base alle dimensioni del controllo ToolStripProgressBar, la proprietà Value determina quando visualizzare il blocco successivo.

Sono disponibili diversi modi per modificare il valore visualizzato dal controllo ToolStripProgressBar, oltre alla modifica diretta della proprietà Value. È possibile utilizzare la proprietà Step per indicare un valore di incremento specifico della proprietà Value e chiamare il metodo PerformStep per incrementare il valore. Per modificare il valore di incremento, è possibile utilizzare il metodo Increment e specificare un valore di incremento per la proprietà Value.

ToolStripProgressBar sostituisce il controllo ProgressBar precedente, che viene comunque mantenuto per garantire la compatibilità con le versioni precedenti.

Nell'esempio di codice riportato di seguito viene illustrato un oggetto ToolStripProgressBar che calcola una sequenza di numeri di 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();
	}
}


Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

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

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0
Il documento è risultato utile?
(1500 caratteri rimanenti)

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
© 2013 Microsoft. Tutti i diritti riservati.