37章:チュートリアル36:WPFタブ区切りのテキスト ファイルを読み取るの作成

    作成2013.04.05

     ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。 フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。

  1. 参照元情報
     タブ区切りのテキスト ファイルを読み取るの作成は(Visual Basic ガイド ツアー)
    「タブ区切りのテキスト ファイルを読み取る」にジャンプする
    「WPF - Windows フォーム用のコントロールを使う」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. フォームアプリケーションからWPFアプリケーションへの変更
     若干の変更でフォームアプリケーションからWPFアプリケーションへの変更ができます。

     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [ WPFタブ区切りのテキスト ファイルを読み取る]をダウンロードする。
     解凍すると「37WpfFileTestB」フォルダーがあります。
    注(1)「37WpfFileTestB」フォルダーの「WpfFileTestB.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内のMainWindow.xaml」をダブルクリックすると「デザイン」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WpfFileTestB.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WpfFileTestB.slnの実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    (4)Test実行ボタンを押します。
    (5)オープン・ファイル・ダイアログが表示されます。
    (6)タブ区切りテキストファイルを選択してOKボタンをおします。
    (7)保存ファイル・ダイアログが表示されます。
    (8)保存場所とファイル名を指定して、保存ボタンを押します。
    (9)クローズボックスでプログラムを終了します。
    (10)保存ファイルにスペースとカンマ区切りファイルが作成されます。


  4. プロジェクトの構成
    (1)UserControl1.vbの構成
    ・OpenFileDialog1とSaveFileDialog1を配置します。

    (2)XAMLコードの構成
    ・UserControl1を配置します。
    ・Buttonを配置します。

    注(1)OpenFileDialog1とSaveFileDialog1がフォームアプリケーション用のツールとなります。
    注(2)OpenFileDialog、SaveFileDialogの「Filterを(*.txt)|*.txt」に設定します。


  5. XAMLの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
        xmlns:self="clr-namespace:WpfFileTestB"
        Title="MainWindow" Height="212" Width="301">
        <Grid>
            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="50,22,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
            <WindowsFormsHost Visibility="Hidden">
                <self:UserControl1 x:Name="myControl"/>
            </WindowsFormsHost>
        </Grid>
    </Window>
    


  6. XAMLのポイント
    (1)<Window>階層1:クラス:以下の記載が特別です。
     xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
     上記の記載はUserControlを使用するための記載です。
      xmlns:self="clr-namespace:WpfFileTest"
     上記の記載はWpfFileTestソリューションを使用するための記載です。
    (2) <WindowsFormsHost x:Name="wfHost" Grid.Row="0">
    <self:UserControl1 x:Name="myControl" />
    </WindowsFormsHost>
     上記の記載でUserControl1の使用条件を設定します。名前は"myControl" となります。
    (3)Grid機能を使用してButtonを配置します。


  7. Class MainWindowクラスの全コード
    Class MainWindow
        Dim RCData(50, 10) As String '2次元配列を定義
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i, j As Integer 'カウント変数定義
            'OpenFileDialogを開く
            If myControl.OpenFileDialog1.ShowDialog() = Forms.DialogResult.OK Then
                '変数MyReaderをTextFieldParser型で生成
                Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(myControl.OpenFileDialog1.FileName)
                    'TextFieldTypeをフィールドが区切り形式に設定
                    MyReader.TextFieldType = FileIO.FieldType.Delimited
                    MyReader.SetDelimiters(vbTab)   '区切り記号をタブに設定
                    Dim currentRow As String()      '変数currentRowを文字型1次元配列で生成
                    i = 0                           'i=0をセット
                    While Not MyReader.EndOfData    'MyReaderのデータがエンドになるまで繰り返し
                        Try                         '通常処理
                            currentRow = MyReader.ReadFields()  '現在行を読み込んで文字列の配列として返します
                            Dim currentField As String          '変数currentFieldをString型で生成
                            j = 0                               'j=0をセット
                            For Each currentField In currentRow 'currentFieldをcurrentRowの範囲で繰り返し
                                RCData(i, j) = currentField     '2次元配列にcurrentFieldをセット
                                If j < 9 Then j = j + 1 '2次元配列の列数制限
                            Next
                        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 'エラー時処理
                            MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
                        End Try
                        If i < 49 Then i = i + 1 '2次元配列の列数制限
                    End While                       '繰り返しエンド点
                End Using
                Dim OutText As String = ""          '変数OutTextをString型で生成
                For i = 0 To 49                     '繰り返し
                    For j = 0 To 9                   '繰り返し
                        OutText = OutText & RCData(i, j) & " , "    'OutTextに2次元配列要素を加算
                    Next j
                    OutText = OutText & vbCrLf                      'OutTextに改行を加算
                Next i
                'SaveFileDialogを開く
                If myControl.SaveFileDialog1.ShowDialog() = Forms.DialogResult.OK Then
                    'OutTextの内容をファイルに出力
                    My.Computer.FileSystem.WriteAllText(myControl.SaveFileDialog1.FileName, OutText, append:=False)
                End If
            End If
        End Sub
    End Class
    


  8. コードの解説
    (1)myControl.OpenFileDialog1.ShowDialog()でファイル名を取得します。
    (2)myControl.SaveFileDialog1.ShowDialog()で保存場所とファイル名を設定します。


  9. Public Class UserControl1クラスのコード
     Public Class UserControl1クラスのコードはありません。


    感想:
    (1)ファイル操作に関して、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードへの変換は非常に簡単です。






38章:チュートリアル37:アニメーションのVBコード化 (VB)に行く。

トップページに戻る。