C#_選択したファイルを読み込んで、中身を別 Form に渡す

続き
真新しいのは TextChanged( ) ぐらい。他は以前書いたのを使いまわし。

流れとしては、
ファイルがあれば OK ボタンが有効になる。
OK ボタンクリック。
選択したファイルを読み込み。
ファイル内容を変数に格納。
値を Form1 に渡す。

 

【前提】
buttonOK の DialogResult を OK。( 動作 のカテゴリーにある )

 

Form 2 のソース
前書いたファイル選択とドラッグ&ドロップのコードに追記。

f:id:koshinRan:20170903192022p:plain

というようなファイルを読み込む。

    private List<List<int>> intDatas_ = new List<List<int>>();
    public List<List<int>> getDatas_
    {
        get { return intDatas_; }
    }

    //テキストボックス変更時発生。ファイル存在の確認
    private void textBoxFile_TextChanged(object sender, EventArgs e)
    {
        if (!File.Exists(textBoxFile1.Text) || !File.Exists(textBoxFile2.Text))
        {
            buttonOK.Enabled = false;
        }
        else
        {
            buttonOK.Enabled = true;
        }
    }

    //OK クリック時、選択したファイルを読み込んで Form1 に渡す準備
    private void buttonOK_Click(object sender, EventArgs e)
    {
        try
        {
            string[ ] datas = File.ReadAllLines(textBoxFile1.Text,
                Encoding.GetEncoding("utf-8"));
            //datas[0] = "100,12,72"
            //datas[1] = "78,65,7"

            int lineNum = 0;

            //string 型なのでint に変換
            foreach (var data in datas)
            {
                string[ ] dataALine = data.Split(',');
                //dataALine = {100, 12, 72}
                //dataALine[1] = 12

                intDatas_.Add(new List<int>());
                foreach (var aData in dataALine)
                {
                    int intAdata;
                    Int32.TryParse(aData, out intAdata);

                    intDatas_[lineNum].Add(intAdata);
                }
                lineNum++;
            }
        }
        catch(Exception error)
        {
            Console.WriteLine(error.ToString());
        }
    }

intDatas_ の中身はこのように格納。

f:id:koshinRan:20170903191938p:plain

Form 1 の form2.getDatas_ で取得できる。

 

Form 1 のコード

    List<List<int>> datas;
    using (Form2 form2 = new Form2())
    {
        if (form2.ShowDialog() != DialogResult.OK)
        {
            return;
        }
        datas = form2.getDatas_;
    }

 

その他設定
・textBox の ReadOnly は True。( 直打ち禁止 )
・buttonOK の Enabled は False。
・テキストボックスの内容が変わったならば、
    ファイルの存在の有無を確認。
    1 と 2 両方あるなら、buttonOK の Enabled は True。
   内容変わった時のイベント発生は TextChanged( )。
・textBoxFile_TextChanged 関数は、
    テキストボックス内が変更したら発生するイベント。
    textBoxFile1 も textBoxFile2 も同じイベントを呼ぶように設定。
・File.ReadAllLines を使用する。例外が発生してもファイルを閉じるため。

 

こちらから。
http://d.hatena.ne.jp/tekk/20091205/1259988284

 

以上。