ファイル選択の処理
今度は、「ファイルを開く」ダイアログボックスでファイルを選んだ時の処理を作成します。
先ほどファイルフィルターを2つ設定したので、「テキストファイルを読み込む処理」と、「イメージ画像を読み込んでリストボックスに組み込む処理」の、2つの処理を作成します。
コードは、C1FilePickerコントロールのSelectedFilesChangedイベントハンドラと、ボタンのClickイベントハンドラに作成します。
テキストファイルを読み込み表示する処理
最初は、テキストファイルを読み込んで表示する処理を作成します。画像処理とファイル操作を行うので、次の4つの名前空間への参照を設定します。
Imports System.Windows.Media.Imaging Imports C1.Silverlight Imports System.IO Imports System.Text
using System.Windows.Media.Imaging; using C1.Silverlight; using System.IO; using System.Text;
次に、C1FilePickerコントロールのSelectedFilesChangedイベントハンドラで、テキストファイルを読み込む処理を作成します。
最初に、「ファイルを開く」ダイアログボックスでファイルが選択されているかどうかをチェックし、選択されている場合のみ処理を実行するようにします。これは、ファイルを選択せずにダイアログボックスのキャンセルボタンが押された場合にも対応する処理です。
そして、C1FilePickerコントロールのSelectedFileプロパティで選択されたファイルを取得します。選択されたファイルは、FileInfoクラスのオブジェクトとしてSelectedFileプロパティに格納されるので、「Extension」プロパティで選択されたファイルの拡張子をチェックし、拡張子が「.txt」の場合のみテキストファイルを読み込む処理を実行するようにします。
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
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プロパティにセットします。
これで、テキストファイルの読み込みと表示の処理はできあがりです。
If fex = ".txt" Then Dim st = C1FilePicker1.SelectedFile.OpenText() TextBox1.Text = st.ReadToEnd
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コントロールに組み込みます。
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
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イベントハンドラのコード全文
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
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メソッドを実行するだけです。
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) ListBox1.Items.Clear() End Sub
private void Button_Click(object sender, RoutedEventArgs e) { ListBox1.Items.Clear(); }
まとめ
Webページで「ファイルを開く」ダイアログボックスが使えるようになると、アプリケーションの機能の幅もぐっと広がります。C1FilePickerコントロールは使い方も簡単で、WindowsフォームのOpenFileDialogコントロールを使ったことがあれば、すぐに使うことができます。