【学習】WinFormsでProgressBarを使ってみよう(進捗を表示する)
これまでの学習では、
- ボタンを押す
- ラベルに表示する
- タイマーで一定時間ごとに処理する
という形でプログラムを動かしてきました。
しかし、長時間の処理ではユーザーに「今どこまで進んでいるか」を伝えたい場面があります。
進捗を視覚的に表示する
という仕組みです。
今回は ProgressBar(プログレスバー) を使って、処理の進み具合を表示するアプリを作ります。
今日作るもの
Start ボタンを押すと
0% → 10% → 20% → ... → 100%
と ProgressBar が右へ伸びていきます。
100% になったら「完了!」とメッセージを表示します。
Timer で一定間隔ごとに進捗を更新する仕組みです。
ソリューションとプロジェクトを作る
Visual Studio で新しいプロジェクトを作ります。
- テンプレート: Windows Forms アプリ (.NET Framework)
- ソリューション名: ProgressSample
- プロジェクト名: ProgressBarDemo
作成すると Form1 が表示されます。
フォームに配置するコントロール
フォームに次の4つを配置します。
| コントロール | 名前 |
|---|---|
| ProgressBar | progressBar1 |
| Button | startButton |
| Label | statusLabel |
| Timer | timer1 |
Timer は画面には表示されません。フォーム下のコンポーネントトレイに配置されます。
Button の Text を「Start」、Label の Text を空にしておきます。
ProgressBarの設定(プロパティ)
ProgressBar を選択し、プロパティウィンドウで次のように設定します。
| プロパティ | 値 | 説明 |
|---|---|---|
| Minimum | 0 | 最小値 |
| Maximum | 100 | 最大値 |
| Value | 0 | 現在の値(0〜100) |
| Step | 10 | PerformStep で増やす量 |
Timerの設定(プロパティ)
Timer を選択し、プロパティウィンドウで
Interval = 200
と設定します。
200ミリ秒なので、0.2秒ごとにイベントが発生します。進捗がスムーズに伸びるようにしています。
イベントを登録する
startButton をダブルクリックすると startButton_Click イベントが作成されます。
timer1 を選択した状態で、プロパティウィンドウの ⚡ 雷マーク(イベント) をクリックし、Tick をダブルクリックすると timer1_Tick イベントが作成されます。
完成コード
using System;
using System.Windows.Forms;
namespace ProgressBarDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void startButton_Click(object sender, EventArgs e)
{
// 進捗を0にリセット
progressBar1.Value = 0;
statusLabel.Text = "処理中...";
// タイマー開始
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
// Step の分だけ進める(10ずつ増える)
progressBar1.PerformStep();
statusLabel.Text = progressBar1.Value + "%";
if (progressBar1.Value >= progressBar1.Maximum)
{
timer1.Stop();
statusLabel.Text = "完了!";
MessageBox.Show("完了!");
}
}
}
}
プログラムの流れ
Startボタンを押す
↓
progressBar1.Value = 0 にリセット
↓
timer1.Start()
↓
0.2秒ごとに timer1_Tick が呼ばれる
↓
progressBar1.PerformStep() で10ずつ増える
↓
Label に進捗を表示
↓
100% になったら停止・完了メッセージ
重要ポイント
ProgressBar は「進捗を視覚的に表示する」 コントロールです。
- Minimum 〜 Maximum の範囲で Value を表示する
- PerformStep() で Step の分だけ Value が増える
- Timer と組み合わせると、一定間隔で進捗を更新できる
- ファイル読み込み、ダウンロード、長時間処理の進捗表示に使える
発展:Value を直接変更する
Step を使わず、Value を直接変更する方法もあります。
progressBar1.Value = Math.Min(progressBar1.Value + 10, progressBar1.Maximum);
ループ処理で「100件中 30 件目」のように進捗を表示する場合は、次のように書けます。
// 例:100件の処理
progressBar1.Maximum = 100;
for (int i = 0; i < 100; i++)
{
// 処理...
progressBar1.Value = i + 1;
Application.DoEvents(); // 画面を更新
}
発展アイデア
ProgressBar を使うと次のようなものも作れます。
- ファイル読み込みの進捗表示
- ループ処理の進捗(例:100件のデータを1件ずつ処理)
- Marquee スタイル(Style = Marquee)で「処理中」をアニメーション表示
- ダウンロードの進捗表示
ProgressBar は長時間処理のユーザー体験を良くするための基本コントロールです。



ディスカッション
コメント一覧
まだ、コメントがありません