スライドショーの処理
TimerコントロールのTickイベントハンドラで、スライドショーの処理を実行します。
まず、ファイル名を格納している配列からファイル名を1つ取出し、PictureBoxコントロールに設定します。この時、OpenFileDialogコントロールでファイル名を直接選択する場合は問題ありませんが、画像ファイル以外のファイル名が選択された場合に備えて例外処理も行っておきます。
次に、画像ファイルのサイズがバラバラになっている場合は、画像に合わせてスプリッターとフォームのサイズを変えて、見栄えを良くします。そして、配列のインデックスを1つ増やし次のTickイベントに備えます。
今回のプログラムでは、プログラムを起動するたびに再生画像ファイルを指定していますが、レジストリに登録するなどの処理を加えれば、プログラム起動時にすぐにスライドショーが始まるように設定できます。
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick Try 'ファイル名の配列から1つファイル名を取出しピクチャーボックスで表示 PictureBox1.Image = Image.FromFile(fname(cnt)) '画像に合わせてスプリッターとフォームのサイズを変える Me.Height = PictureBox1.Image.Height + 50 SplitContainer1.SplitterDistance = pos Me.Width = PictureBox1.Image.Width + SplitContainer1.SplitterDistance + 10 Catch ex As Exception '画像表示に失敗した場合は何もしない End Try '配列のインデックスを1つ増やす cnt += 1 If cnt > fname.Count() Then cnt = 0 End If End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 'スライドの再生時間を変更 Timer1.Interval = NumericUpDown1.Value * 1000 End Sub
private void timer1_Tick(object sender, EventArgs e) { try { //ファイル名の配列から1つファイル名を取出しピクチャーボックスで表示 pictureBox1.Image = Image.FromFile(fname[cnt]); //画像に合わせてスプリッターとフォームのサイズを変える this.Height = pictureBox1.Image.Height + 50; splitContainer1.SplitterDistance = pos; this.Width = pictureBox1.Image.Width + splitContainer1.SplitterDistance + 10; } catch { //画像表示に失敗した場合は何もしない } //配列のインデックスを1つ増やす cnt += 1; if(cnt > fname.Count()) { cnt = 0; } } private void button2_Click(object sender, EventArgs e) { //スライドの再生時間を変更 timer1.Interval = (int)numericUpDown1.Value * 1000; }
ここでは、便宜上エラーになった場合はcatchにジャンプさせているだけですが、実際のアプリケーションでは、ファイル名やファイルの拡張子のチェックなどもう少し細かいエラー処理があると、スムーズなスライドショーになります。
C1NavBarコントロールの展開・折りたたみ時の処理
では最後に、C1NavBarコントロールのCollapseボタンがクリックされ、展開・折りたたみが実行されたときに、画像サイズに合わせてスプリッターとフォームのサイズを変える処理を作成しておきます。
C1NavBarコントロールのCollapseボタンがクリックされると、CollapseButtonClickイベントが発生します。このイベントハンドラで処理を実行します。
Collapseボタンがクリックされると、Collapsedプロパティの値がTrueになりますので、この値を利用して現在展開されているのか折りたたまれているのかを判断します。
そして、PictureBoxコントロールに画像がセットされている場合は、それぞれの状態に合わせてスプリッターとフォームのサイズを変更します。
Private Sub C1NavBar1_CollapseButtonClick(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles C1NavBar1.CollapseButtonClick 'ナビパネルを折りたたんだ場合と開いた場合でスプリッターのサイズを調節 If C1NavBar1.Collapsed = True Then pos = 50 Else pos = 150 End If '画像に合わせてスプリッターとフォームのサイズを変える SplitContainer1.SplitterDistance = pos If PictureBox1.Image IsNot Nothing Then Me.Width = PictureBox1.Image.Width + SplitContainer1.SplitterDistance + 10 End If
private void c1NavBar1_CollapseButtonClick(object sender, CancelEventArgs e) { //ナビパネルを折りたたんだ場合と開いた場合でスプリッターのサイズを調節 if (c1NavBar1.Collapsed == true) { pos = 50; } else { pos = 150; } //画像に合わせてスプリッターとフォームのサイズを変える splitContainer1.SplitterDistance = pos; if(pictureBox1.Image != null) { this.Width = pictureBox1.Image.Width + splitContainer1.SplitterDistance + 10; } } } }
まとめ
ナビゲーションパネルを使うことで、アプリケーションの操作機能と表示を分けたり、機能をカテゴリー分けしたりして使うことができるため、ユーザーには操作性の高いアプリケーションを提供できます。1つの画面にいくつもの操作パネルや情報表示を行いたい場合などは、特に威力を発揮するコントロールといえます。
C1NavBarコントロールのヘルプは、現在のComponentOne Studio Enterprise 2012Jには収録されていません。次期バージョンには収録される予定です。詳細は、公式サイトのオンラインヘルプを利用できます(英文)。
注意事項
記事で使用した写真を、無断で転送・販売・配布することを固く禁止します。
- 画像提供:アルペンガーデン やまくさ