39章:WPFタブ区切りのテキスト ファイルを読み取るの作成

    作成2013.04.27

     ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。
  1. 参照元情報
     タブ区切りのテキスト ファイルを読み取るの作成は(Visual Basic ガイド ツアー)
    「タブ区切りのテキスト ファイルを読み取る」にジャンプする
    「WPF - Windows フォーム用のコントロールを使う」にジャンプする
     作成方法の詳細は上記を参照願います。


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

     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [ WPFタブ区切りのテキスト ファイルを読み取る]をダウンロードする。
     解凍すると「39WpfFileTestB」フォルダーがあります。
    注(1)「39WpfFileTestB」フォルダーの「WpfFileTestB.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(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. MainWindow.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. MainWindow.xaml.csの全コード
    using System;
    using System.Windows;
    using System.Windows.Forms;
    using System.IO;
    
    namespace WpfFileTestB
    {
        public partial class MainWindow : Window
        {
            String[,] RCData = new String[50, 20];
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button1_Click(object sender, RoutedEventArgs e)
            {
                int i, j;
    
                if (myControl.OpenFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new Microsoft.VisualBasic.FileIO.TextFieldParser(myControl.OpenFileDialog1.FileName))
                    {
                        MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
                        MyReader.SetDelimiters("\t");
                        String[] currentRow;
                        i = 0;
                        while (MyReader.EndOfData != true)
                        {
                            try
                            {
                                currentRow = MyReader.ReadFields();
                                j = 0;
                                foreach (String currentField in currentRow)
                                {
                                    RCData[i, j] = currentField;
                                    if (j < 9) { j = j + 1; }
                                }
                            }
                            catch (InvalidCastException ex)
                            {
                                System.Windows.Forms.MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                            if (i < 49) { i = i + 1; }
                        }
                    }
                    String OutText = "";
                    for (i = 0; i < 49; i++)
                    {
                        for (j = 0; j < 9; j++)
                        {
                            OutText = OutText + RCData[i, j] + " , ";
                        }
                        OutText = OutText + "\r\n";
                    }
    
                    if (myControl.SaveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        using (StreamWriter outfile = new StreamWriter(myControl.SaveFileDialog1.FileName))
                        {
                            outfile.Write(OutText);
                        }
                    }
                }
            }
        }
    }
    
    


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


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


    感想:
    (1)C#においては、コードの記述はWPFにおいては、厳密になる傾向がみられます。
    (2)コードの種類が増大するに従い、曖昧な記述が許されないのかもしれません。







40章:アニメーションのコード化に行く。

トップページに戻る。