訪問して頂きありがとうございます。まさふくろーです。
この記事では、プログレスバーを使って、処理の進行状況を視覚的にわかるように表示する方法をご紹介します。
目次
処理の進行状況を視覚的にわかるように表示する
使用するコントロール
ProgressBarコントロール
解説
|
処理の進捗状況を視覚的に表示するには、ProgressBarコントロールを使います。 |
ProgressBarコントロールは、ツールボックスの「コモンコントロール」から「ProgressBar」を選択して、フォームに配置します。
|
|
ProgressBarコントロールを使うときは、Minimumプロパティで最小値、Maximumプロパティで最大値を設定し、Valueプロパティで現在の値を指定します。 |
その他、使用するコントロール
コントロール | 用途 | |
Label | フォーム上の任意の位置に文字列を表示する | プログレスバーの上に「処理中」メッセージを表示する |
Button | クリックしたときに処理を実行する | プログレスバーの処理などを記述する |
作成手順(親画面)
「サンプルデータ作成」ボタンの設置
ツールボックスから「Button」を選択します。
フォームに配置します。
「Text」プロパティに「サンプルデータ作成」と入力し、ボタンに表示する文字を設定します。
イベントハンドラーの作成
プロパティウィンドウの①「イベント」をクリック⇒②イベント一覧「Click」の入力ボックス(ピンク枠)をダブルクリックし、「Click」イベントを作成します。
「処理開始」ボタンの設置
ツールボックスから「Button」を選択します。
フォームに配置します。
「Text」プロパティに「処理開始」と入力し、ボタンに表示する文字を設定します。
イベントハンドラーの作成
プロパティウィンドウの①「イベント」をクリック⇒②イベント一覧「Click」の入力ボックス(ピンク枠)をダブルクリックし、「Click」イベントを作成します。
作成手順(子画面:プログレスバー)
Windowsフォームの追加
メニューバーの「プロジェクト」をクリックします。
「Windowsフォームの追加」を選択します。
①「フォームの名前」を入力⇒②「追加」ボタンをクリックします。
「フォーム」の各種設定
プロパティウィンドウにて、以下プロパティを設定します。
プロパティ | 設定値 | |
FormBorderStyle | フォームの境界線およびタイトルバーの設定 | None |
BackColor | フォームの背景色を設定 | ControlLight |
Size | フォームの大きさを設定 | 263, 71 |
StartPosition | フォームの起動時の表示位置を設定 | CenterScreen |
「プログレスバー」の設置
ツールボックスから「ProgressBar」を選択します。
フォームに配置します。
「プログレスバー」の各種設定
プロパティウィンドウにて、以下プロパティを設定します。
プロパティ | 設定値 | |
Location | フォーム上のコントロールの位置を設定 | 7, 41 |
Size | コントロールの大きさを設定 | 249, 22 |
「ラベル」の設置
ツールボックスから「Label」を選択します。
フォームに配置します。
「ラベル」の各種設定
プロパティウィンドウにて、以下プロパティを設定します。
プロパティ | 設定値 | |
AutoSize | フォントサイズをもとにサイズの自動調整を行うかの設定 | False |
Location | フォーム上のコントロールの位置を設定 | 13, 13 |
Size | コントロールの大きさを設定 | 232, 17 |
Text | ラベルに表示する文字 | ブランク |
サンプルプログラム(子画面:プログレスバー)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Public Class Form2 'プロパティ用変数の宣言 Dim _ProcessCount As Integer ''' <summary> ''' フォーム間のデータ受け渡し用プロパティ ''' </summary> ''' <returns></returns> Public Property ProcessCount As Integer Get ProcessCount = _ProcessCount End Get Set(value As Integer) _ProcessCount = value End Set End Property ''' <summary> ''' 画面起動時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load ProgressBar1.Minimum = 0 ProgressBar1.Maximum = ProcessCount ProgressBar1.Value = 0 End Sub End Class |
9 | プログレスバー最大値設定用プロパティ |
23 | 画面起動時に、以下プロパティの値を設定。 |
25 | プログレスバーの最小値に「0」を設定。 |
26 | プログレスバーの最大値に「ProcessCount」を設定。親画面で設定した処理件数を取得。 |
27 | プログレスバーのValueプロパティに「0」を設定。Valueプロパティの初期化。 |
サンプルプログラム(親画面)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
Public Class Form1 Dim dt As New DataTable ''' <summary> ''' サンプルデータ作成ボタンクリック時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click dt.Columns.Clear() dt.Columns.Add("Item1") Dim i As Integer Dim Row As DataRow For i = 0 To 100 Row = dt.NewRow Row("Item1") = i dt.Rows.Add(Row) Next MsgBox("サンプルデータ作成完了", vbOKOnly) End Sub ''' <summary> ''' 処理開始ボタンクリック時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim frm2 As New Form2 With frm2 .ProcessCount = dt.Rows.Count .Show() .Label1.Text = "処理中・・・" .Label1.Refresh() Dim NowCnt As Integer For Each row As DataRow In dt.Rows NowCnt = NowCnt + 1 .ProgressBar1.Value = NowCnt System.Threading.Thread.Sleep(100) Next .Label1.Text = String.Empty .Close() End With End Sub End Class |
3 | データテーブルのインスタンスを作成 |
10 | サンプルデータ作成ボタンクリック時に、以下処理を行う。 |
12 | データテーブルの列項目の初期化。 |
13 | データテーブルに「Item1」列を作成。 |
15 | カウンター変数「i」を宣言 |
16 | DataRow型変数「Row」を宣言 |
18 | 100回、以下処理を繰り返す。 |
19 | データテーブル新規行をDataRow型変数「Row」に設定 |
20 | データテーブルの「Item1」列に、カウンター変数を設定 |
21 | データテーブルの新規行に値を追加 |
33 | 処理開始ボタンクリック時に、以下処理を行う。 |
35 | 「Form2」クラスのインスタンスを作成 |
38 | 18行目~22行目で作成したデータテーブルの件数を取得し、「ProcessCount」プロパティに設定。 |
39 | 子画面(プログレスバー)を呼び出す。 |
41 | 子画面(プログレスバー)のラベルに「処理中・・・」メッセージを設定 |
44 | プログレスバーの「Value」プロパティ設定用、カウンター変数「NowCnt」を宣言。 |
46 | データテーブルの件数分、以下処理を繰り返す。 |
48 | カウンター変数「NowCnt」の値を「1」ずつ加算。 |
49 | プログレスバーの「Value」プロパティに、カウンター変数「NowCnt」を設定。 |
50 | 0.1秒待機(実際は、このコードは不要)。ここに、処理すべきコードを記述する。 |
54 | 子画面(プログレスバー)のラベルの初期化。 |
55 | 子画面(プログレスバー)を閉じる。 |
最後まで読んでいただき、ありがとうございました!