どうも!リョクちゃです。
久しぶりの投稿となってしまいました。。。
今回は前回紹介したPictureBoxと新たにTimer、これらのコントロールを使って
ランダムに画像が再生されるスライドショーを作ってみたので紹介していきます。
ちなみにスライドショーとは、画像や資料を順番に表示する機能のことを指します。
前回の記事はこちらになります。
目次
準備編
今回作成するWindowsフォームアプリケーションについて、
各章立てて触れていきます。
準備編:フォームの作成
以下のフォームを作成していきます。
※Timerコントロールも配置しています。
No | アイテム | コントロール名 |
---|---|---|
1 | PictureBox | PictureBox |
2 | Button | Button1 |
3 | Button | Button2 |
4 | Timer | Timer1 |
準備編:スライドショーフォルダの作成
スライドショーで表示する画像を下記フォルダを作成し、あらかじめ準備をしておきます。
今回はデスクトップ上に新たにフォルダを作成し、作成したフォルダに表示する
画像ファイルを保存しておきます。
筆者は以下のフォルダを作成しました。
※ユーザ名には自身のPC端末のユーザ名が割り当てられます。
OSによっては異なるかと思います。
SlideTestフォルダに画像ファイルを保存しています。
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
アプリケーションの目的
スライドショー開始ボタンを押すとスライドショーフォルダにある画像ファイルを
ランダムに1秒ごとにPictureBoxに表示し、スライドショー停止ボタンを押すと
現在表示されている画像でスライドショーが停止する。
これらの機能を満たし実行できることを目的とする。
プログラム編
定数宣言
最初に作成したスライドショーフォルダのパスを定数として宣言します。
1 2 3 4 |
''' <summary> ''' スライドショーを開始するフォルダパス ''' </summary> Private Const SLIDE_SHOW_DIR As String = "C:\Users\ユーザ名\Desktop\SlideTest" |
変数宣言
変数として、以下の変数をあらかじめ宣言しておきます。
1 2 3 4 |
''' <summary> ''' スライドショーフォルダにある画像パスを格納する変数 ''' </summary> Private lstPicture As List(Of String) = Nothing |
ボタンイベント
スライドショー開始ボタンと停止ボタンを押したときに発生するクリックイベントを
作成しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
''' <summary> ''' スライドショー開始ボタン押下 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 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 End Sub |
タイマーイベント
設定した時間おきに動作するIntervalイベントを作成しておきます。
1 2 3 4 5 6 7 8 |
''' <summary> ''' 設定時間経過したら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick End Sub |
処理
各ボタンを押した後の処理を書いていきます。
スライドショー開始ボタン押下処理
フォルダ内の画像ファイルパスを取得
スライドショーを開始するフォルダから画像ファイルのパスを取得するコードを書きます。
1 2 |
' スライドショーを開始するフォルダからファイルを取得 Dim files As String() = System.IO.Directory.GetFiles(SLIDE_SHOW_DIR) |
と書くことで、フォルダ内にあるファイルのパスを取得し、
String()の配列として結果が得られます。
画像ファイルがフォルダにあるなら処理ができるようにします。
1 2 3 4 |
' 画像パスが格納されていたら If files.Count <> 0 Then End If |
変数の初期化
あらかじめ宣言した変数を初期化し、変数に画像ファイルのパスを格納していきます。
1 2 3 4 5 6 |
' 変数の初期化 lstPicture = New List(Of String) ' 各ファイルを変数に格納 For Each file As String In files lstPicture.Add(file) Next file |
タイマーの設定
タイマーの間隔を1秒に設定し、タイマーをスタートさせます。
タイマーの間隔を設定するには、
と書きます。
1秒は1000ミリ秒になります。
1 2 3 4 |
' タイマーの間隔を1秒に設定 Me.Timer1.Interval = 1000 ' タイマースタート Me.Timer1.Start() |
タイマー指定間隔経過後の処理
PictureBoxの設定
PictureBoxに表示される画像のサイズを変更します。
1 2 |
' PicturaBox1に表示される画像サイズを変更 → Zoom PictureBox1.SizeMode = PictureBoxSizeMode.Zoom |
PictureBoxに表示する画像をランダムで決めるため、下記コードを記述します。
1 2 |
' PictureBox1に表示する画像をランダムで決める Dim rdPicture As New System.Random() |
PictureBoxへ画像を表示
rdPicture変数を使い、PictureBoxへ画像を表示するコードを書きます。
1 |
PictureBox1.Image = System.Drawing.Image.FromFile(lstPicture(rdPicture.Next(lstPicture.Count - 1))) |
これはlstPicture変数に含まれる画像ファイルパスを
rdPicture.Next(lstPicture.Count-1)と書くことで、
lsPicture変数に含まれている画像ファイルの数-1した値を
rdPicture.Nextでランダムに呼び出します。
今回は、lstPictureに含まれる画像ファイルの数は5枚、
lstPicture変数の開始番号は0からになるので-1としています。
rdPicture.Next(4)となり、0~4をランダムで呼び出すことができます。
こうすることで、ランダムなスライドショーを作ることができます。
スライドショー停止ボタン押下処理
タイマー停止処理を記述します。
1 |
Me.Timer1.Stop() |
停止ボタン押下処理はこれだけになります。
最後に全体のコードを貼っておきます。
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 |
Public Class TestSlideShow ''' <summary> ''' スライドショーを開始するフォルダパス ''' </summary> Private Const SLIDE_SHOW_DIR As String = "C:\Users\ユーザ名\Desktop\SlideTest" ''' <summary> ''' スライドショーフォルダにある画像パスを格納する変数 ''' </summary> Private lstPicture As List(Of String) = Nothing ''' <summary> ''' スライドショー開始ボタン押下 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' スライドショーを開始するフォルダからファイルを取得 Dim files As String() = System.IO.Directory.GetFiles(SLIDE_SHOW_DIR) ' 画像パスが格納されていたら If files.Count <> 0 Then ' 変数の初期化 lstPicture = New List(Of String) ' 各ファイルを変数に格納 For Each file As String In files lstPicture.Add(file) Next file ' タイマーの間隔を1秒に設定 Me.Timer1.Interval = 1000 ' タイマースタート Me.Timer1.Start() End If 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 Me.Timer1.Stop() End Sub ''' <summary> ''' 設定時間経過したら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ' PicturaBox1に表示される画像サイズを変更 → Zoom PictureBox1.SizeMode = PictureBoxSizeMode.Zoom ' PictureBox1に表示する画像をランダムで決める Dim rdPicture As New System.Random() PictureBox1.Image = System.Drawing.Image.FromFile(lstPicture(rdPicture.Next(lstPicture.Count - 1))) End Sub End Class |
実行編
作成したコードを実行していきます。
起動時
スライドショー開始ボタンを押します。
1秒おきに画像がランダムに切り替わります。
ちなみに画像は、筆者が学生時代に作成した小型ロボットの画像になります。
次に停止ボタンを押します。
停止ボタン押下後、表示されている画像のまま切り替わることはありません。
また開始ボタンを押すとスライドショーが再開されます。
画像だと実行結果がいまいちわかりにくいかもしれないので、
作成したコードを自身の環境で試していただければなと思います。
まとめ
PictureBoxの応用例として、Timerを使ったランダムなスライドショーを
実際に作って解説していきました。
Windowsフォームアプリケーションでは、各サポートされているコントロール同士を
組み合わせることで様々な使い方があります。
時に爆発的な効果を発揮し、万人受けするようなアプリケーションもあります。
今回はそのきっかけとして読者の方にイメージを掴んでいただけたらなと思います。
最後までご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。