SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

ナビゲーションバーを持ったスライドショープログラムの作成

ComponentOne Studio Enterprise 2012JのC1NavBarコントロールを使った.NETアプリケーションの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

スライドショーの処理

 TimerコントロールのTickイベントハンドラで、スライドショーの処理を実行します。

 まず、ファイル名を格納している配列からファイル名を1つ取出し、PictureBoxコントロールに設定します。この時、OpenFileDialogコントロールでファイル名を直接選択する場合は問題ありませんが、画像ファイル以外のファイル名が選択された場合に備えて例外処理も行っておきます。

 次に、画像ファイルのサイズがバラバラになっている場合は、画像に合わせてスプリッターとフォームのサイズを変えて、見栄えを良くします。そして、配列のインデックスを1つ増やし次のTickイベントに備えます。

※注意

 今回のプログラムでは、プログラムを起動するたびに再生画像ファイルを指定していますが、レジストリに登録するなどの処理を加えれば、プログラム起動時にすぐにスライドショーが始まるように設定できます。

Visual Basic
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
C#
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コントロールに画像がセットされている場合は、それぞれの状態に合わせてスプリッターとフォームのサイズを変更します。

Visual Basic
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
C#
        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には収録されていません。次期バージョンには収録される予定です。詳細は、公式サイトのオンラインヘルプを利用できます(英文)。

注意事項

 記事で使用した写真を、無断で転送・販売・配布することを固く禁止します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6677 2012/07/30 16:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング