学習記事一覧 · WinForms基礎

【学習】WinFormsでProgressBarを使ってみよう(進捗を表示する)

これまでの学習では、

  • ボタンを押す
  • ラベルに表示する
  • タイマーで一定時間ごとに処理する

という形でプログラムを動かしてきました。

しかし、長時間の処理ではユーザーに「今どこまで進んでいるか」を伝えたい場面があります。

進捗を視覚的に表示する

という仕組みです。

今回は ProgressBar(プログレスバー) を使って、処理の進み具合を表示するアプリを作ります。

今日作るもの

Start ボタンを押すと

0%10%20%... → 100%

と ProgressBar が右へ伸び、Label に同じ数字を表示します。

100% になったら Label に「完了!」 と表示してタイマーを止めます。

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)
        {
            progressBar1.Value = 0;
            statusLabel.Text = "処理中...";
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            progressBar1.PerformStep();
            statusLabel.Text = progressBar1.Value + "%";

            if (progressBar1.Value >= progressBar1.Maximum)
            {
                timer1.Stop();
                statusLabel.Text = "完了!";
            }
        }
    }
}

プログラムの流れ

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)で「処理中」をアニメーション表示
  • ダウンロードの進捗表示
  • TextBox にログのように進捗を1行ずつ追記する

ProgressBar は長時間処理のユーザー体験を良くするための基本コントロールです。