SHOEISHA iD

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

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

ComponentZine(ComponentOne)

ファイルを開くダイアログを持ったSilverlightアプリケーションの作成

ComponentOne Studio for SilverlightのC1FilePickerコントロールを使ったWebページの作成

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

ファイル選択の処理

 今度は、「ファイルを開く」ダイアログボックスでファイルを選んだ時の処理を作成します。

 先ほどファイルフィルターを2つ設定したので、「テキストファイルを読み込む処理」と、「イメージ画像を読み込んでリストボックスに組み込む処理」の、2つの処理を作成します。

 コードは、C1FilePickerコントロールのSelectedFilesChangedイベントハンドラと、ボタンのClickイベントハンドラに作成します。

テキストファイルを読み込み表示する処理

 最初は、テキストファイルを読み込んで表示する処理を作成します。画像処理とファイル操作を行うので、次の4つの名前空間への参照を設定します。

Visual Basic
Imports System.Windows.Media.Imaging
Imports C1.Silverlight
Imports System.IO
Imports System.Text
C#
using System.Windows.Media.Imaging;
using C1.Silverlight;
using System.IO;
using System.Text;

 次に、C1FilePickerコントロールのSelectedFilesChangedイベントハンドラで、テキストファイルを読み込む処理を作成します。

 最初に、「ファイルを開く」ダイアログボックスでファイルが選択されているかどうかをチェックし、選択されている場合のみ処理を実行するようにします。これは、ファイルを選択せずにダイアログボックスのキャンセルボタンが押された場合にも対応する処理です。

 そして、C1FilePickerコントロールのSelectedFileプロパティで選択されたファイルを取得します。選択されたファイルは、FileInfoクラスのオブジェクトとしてSelectedFileプロパティに格納されるので、「Extension」プロパティで選択されたファイルの拡張子をチェックし、拡張子が「.txt」の場合のみテキストファイルを読み込む処理を実行するようにします。

Visual Basic
Private Sub C1FilePicker1_SelectedFilesChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

	If C1FilePicker1.SelectedFile IsNot Nothing Then
	    Dim fex As String = C1FilePicker1.SelectedFile.Extension
	    If fex = ".txt" Then
C#
private void C1FilePicker1_SelectedFilesChanged(object sender, EventArgs e)
{
    if (C1FilePicker1.SelectedFile != null) 
    {
        String fex = C1FilePicker1.SelectedFile.Extension;
        if( fex == ".txt")
        {

 続いて、StreamReaderクラスのOpenTextメソッドを使用してテキストファイルを開き、ReadToEndメソッドでテキストファイルの中身をすべて取り出し、TextBoxコントロールのTextプロパティにセットします。

 これで、テキストファイルの読み込みと表示の処理はできあがりです。

Visual Basic
If fex = ".txt" Then
    Dim st = C1FilePicker1.SelectedFile.OpenText()

    TextBox1.Text = st.ReadToEnd
C#
if( fex == ".txt")
{
    var st = C1FilePicker1.SelectedFile.OpenText();
 	TextBox1.Text = st.ReadToEnd();
}

イメージ画像を読み込み表示する処理

 今度は、イメージ画像が選択された場合、そのファイルを読み込み、Imageコントロールで表示しリストボックスに組み込んで表示する処理を作成します。

 まず、テキストファイルと同様、C1FilePickerコントロールのSelectedFileプロパティで選択されたファイルを取得し、OpenReadメソッドで開きます。画像ファイルはバイナリファイルなので、OpenTextメソッドではなくOpenReadメソッドを使用します。

 次に、BitmapImageクラスとImageクラスのインスタンスを作成し、StreamクラスのSetSourceメソッドで画像ファイルをBitmapImageオブジェクトにします。それを、そのままImageコントロールで表示し、そのImageコントロールをListBoxコントロールに組み込みます。

Visual Basic
	    Else
	        Dim st = C1FilePicker1.SelectedFile.OpenRead()
	        Dim bmp = New BitmapImage()
	        Dim image = New Image()
	        bmp.SetSource(st)
	        image.Source = bmp
	        image.Stretch = Stretch.Uniform
	        image.Height = 100
	        image.Width = 180

	        ListBox1.Items.Add(image)
	    End If
	End If
End Sub
C#
        else
        {   
            var st = C1FilePicker1.SelectedFile.OpenRead();
            var bmp = new BitmapImage();
            Image image = new Image();
            bmp.SetSource(st);
            image.Source = bmp;
            image.Stretch = Stretch.Uniform;
            image.Height = 100;
            image.Width = 180;

            ListBox1.Items.Add(image);
        }
	}
}
SelectedFilesChangedイベントハンドラのコード全文
Visual Basic
Private Sub C1FilePicker1_SelectedFilesChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

	If C1FilePicker1.SelectedFile IsNot Nothing Then
	    Dim fex As String = C1FilePicker1.SelectedFile.Extension
	    If fex = ".txt" Then
	        Dim st = C1FilePicker1.SelectedFile.OpenText()

	        TextBox1.Text = st.ReadToEnd
	    Else
	        Dim st = C1FilePicker1.SelectedFile.OpenRead()
	        Dim bmp = New BitmapImage()
	        Dim image = New Image()
	        bmp.SetSource(st)
	        image.Source = bmp
	        image.Stretch = Stretch.Uniform
	        image.Height = 100
	        image.Width = 180

	        ListBox1.Items.Add(image)
	    End If
	End If
End Sub
C#
private void C1FilePicker1_SelectedFilesChanged(object sender, EventArgs e)
{
    if (C1FilePicker1.SelectedFile != null) 
    {
        String fex = C1FilePicker1.SelectedFile.Extension;
        if( fex == ".txt")
        {
            var st = C1FilePicker1.SelectedFile.OpenText();
         	TextBox1.Text = st.ReadToEnd();
        }
        else
        {   
            var st = C1FilePicker1.SelectedFile.OpenRead();
            var bmp = new BitmapImage();
            Image image = new Image();
            bmp.SetSource(st);
            image.Source = bmp;
            image.Stretch = Stretch.Uniform;
            image.Height = 100;
            image.Width = 180;

            ListBox1.Items.Add(image);
        }
	}
}

リストをクリアするコードの作成

 Imageコントロールを組み込んだリストボックスのリストをクリアする処理を、ボタンのClickイベントハンドラに作成します。

 これは、ListBoxコントロールのClearメソッドを実行するだけです。

Visual Basic
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
	ListBox1.Items.Clear()
End Sub
C#
private void Button_Click(object sender, RoutedEventArgs e)
{
	ListBox1.Items.Clear();
}

まとめ

 Webページで「ファイルを開く」ダイアログボックスが使えるようになると、アプリケーションの機能の幅もぐっと広がります。C1FilePickerコントロールは使い方も簡単で、WindowsフォームのOpenFileDialogコントロールを使ったことがあれば、すぐに使うことができます。

参考文献(下記URLは予告なく変更される場合があります)

製品情報

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5663 2010/12/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング