ToolStripProgressBar クラス
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文
ToolStripProgressBar コントロールは、時間のかかる操作の進行状況を視覚的に示します。ToolStripProgressBar コントロールは、操作の進行状況に合わせてシステム強調表示カラーで左から右へ塗りつぶされるバーを表示します。
メモ |
---|
ToolStripProgressBar コントロールは、通常、アプリケーションがファイルのコピーやドキュメントの印刷などのタスクを実行するときに使用されます。視覚的な手掛かりがないと、アプリケーションのユーザーは、アプリケーションから応答がないと判断する場合もあります。ToolStripProgressBar を使用すると、アプリケーションが時間のかかるタスクを実行していること、およびアプリケーションがまだ応答中であることをユーザーに知らせることができます。
Maximum プロパティおよび Minimum プロパティは、タスクの進行状況を表す値の範囲を定義します。Minimum プロパティは、通常は 0 の値に設定され、Maximum プロパティは、通常、タスクの完了を示す値に設定されます。たとえば、複数のファイルをコピーする場合に、進行状況を適切に表示するには、Maximum プロパティをコピーされるファイルの合計数に設定することが考えられます。Value プロパティは、操作の完了に向かってアプリケーションがどこまで進行したかを表します。コントロールに表示されるバーはブロックのコレクションであるため、ToolStripProgressBar によって表示される値は Value プロパティの現在のおおよその値を示します。ToolStripProgressBar のサイズに基づいて、Value プロパティは次のブロックをいつ表示するかを決定します。
ToolStripProgressBar によって表示される値を変更するには、Value プロパティを直接変更する方法の他に、いくつかの方法があります。Step プロパティを使用すると、Value プロパティをインクリメントする特定の値を指定してから、PerformStep メソッドを呼び出して値をインクリメントできます。インクリメント値を変更するには、Increment メソッドを使用して、Value プロパティをインクリメントするために使用する値を指定します。
ToolStripProgressBar は 以前の ProgressBar コントロールの代わりに採用されていますが、後方互換性のために残されています。
一連のフィボナッチの数列を計算する ToolStripProgressBar のコード例を次に示します。
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(); } }
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.ToolStripItem
System.Windows.Forms.ToolStripControlHost
System.Windows.Forms.ToolStripProgressBar
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
ToolStripProgressBar メンバ
System.Windows.Forms 名前空間
その他の技術情報
ToolStrip コントロール (Windows フォーム)
ToolStrip サンプル
- ToolStripProgressBar クラスのページへのリンク