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

広告

これまでの学習では、

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

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

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

進捗を視覚的に表示する

という仕組みです。

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

今日作るもの

Start ボタンを押すと

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

と ProgressBar が右へ伸びていきます。

100% になったら「完了!」とメッセージを表示します。

Timer で一定間隔ごとに進捗を更新する仕組みです。


ソリューションとプロジェクトを作る

Visual Studio で新しいプロジェクトを作ります。

  • テンプレート: Windows Forms アプリ (.NET Framework)
  • ソリューション名: ProgressSample
  • プロジェクト名: ProgressBarDemo

作成すると Form1 が表示されます。


フォームに配置するコントロール

フォームに次の4つを配置します。

コントロール名前
ProgressBarprogressBar1
ButtonstartButton
LabelstatusLabel
Timertimer1

Timer は画面には表示されません。フォーム下のコンポーネントトレイに配置されます。

Button の Text を「Start」、Label の Text を空にしておきます。


ProgressBarの設定(プロパティ)

ProgressBar を選択し、プロパティウィンドウで次のように設定します。

プロパティ説明
Minimum0最小値
Maximum100最大値
Value0現在の値(0〜100)
Step10PerformStep で増やす量

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 は長時間処理のユーザー体験を良くするための基本コントロールです。

訪問数 1 回, 今日の訪問数 1回

広告