C#でのフォーム間データのやり取りについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
GaZ

C#でのフォーム間データのやり取りについて

#1

投稿記事 by GaZ » 9年前

Visual Studio Express 2013を使用して
フォーム1のリストボックスでファイルを選択してボタンを押すと
フォーム4に表示されるようにしたいのですができずにいます。
ご教授お願いいたします。

リストボックスへの表示

コード:

 
        private void Form1_Load(object sender, EventArgs e)
        {
            //"./Data"以下のファイルをすべて取得
            string[] files = System.IO.Directory.GetFiles(
                @"./Data", "*", System.IO.SearchOption.AllDirectories);

            //フォルダ名を削除
            for (int i = 0; i < files.Length; i++)
            {
                string s1 = files[i].Remove(0, 7);
                string s = s1.TrimEnd('.', 't', 'x', 't');

                //ListBox1に結果を表示する
                listBox1.Items.Add(s);
            }
            
        }
ボタンのイベント

コード:

 
        private void button1_Click(object sender, EventArgs e)
        {

            var lot = Console.WriteLine("SelectedItem:{0}", listBox1.SelectedItem);

            

            Form4 f = new Form4();
            //Form4を表示する
            //オーナーウィンドウにthisを指定する
            f.ShowDialog(this);
            //フォームが必要なくなったところで、Disposeを呼び出す
            f.Dispose();

        }
フォーム4

コード:

 
        private void Form4_Load(object sender, EventArgs e)
	{
                //ファイルの有無の確認
            string _File =  "./Data/" + lot +".txt";
            if (System.IO.File.Exists(_File)) 
            {
                string _Log = "ログ表示";
                
                //ファイルを読み込む
                System.IO.StreamReader sw = new System.IO.StreamReader(
                    _File,
                    System.Text.Encoding.GetEncoding("Shift_JIS"));

                string _Log_ = sw.ReadLine();

                sw.Close();
            else {
                _Text = str + "は存在しません。";
            }
	}

以上よろしくお願いします。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: C#でのフォーム間データのやり取りについて

#2

投稿記事 by YuO » 9年前

GaZ さんが書きました:Visual Studio Express 2013を使用して
フォーム1のリストボックスでファイルを選択してボタンを押すと
フォーム4に表示されるようにしたいのですができずにいます。
ご教授お願いいたします。
Form4 が Form1 の選択結果をメソッドやプロパティで受け取れるようにするのが簡単だと思います。
オフトピック
Formのデータを直接引き回さない,データバインディング系の方が好きではありますが……。

コード:

// Form4.cs 内
private string lot;

public string Lot
{
    get
    {
        return lot;
    }
    set
    {
        // lot に対する各種条件によるガード句。
        lot = value;
    }
}

コード:

// Form1.cs の button1_Click (object, System.EventHandler) メソッド
private void button1_Click (object sender, EventHandler e)
{
    using (var f = new Form4())
    {
        f.Lot = (string)listBox1.SelectedItem;
        f.ShowDialog(this);
    }
}

ちなみに,ファイル名から拡張子を抜いたものは,Path.GetFileNameWithoutExtensionメソッドを使えば取得できます。
オフトピック
Pathクラスのメソッド一覧などは,一度目を通しておくことをお薦めします。

GaZ

Re: C#でのフォーム間データのやり取りについて

#3

投稿記事 by GaZ » 9年前

>>YuO様
早々の返信ありがとうございました
望んでた様に動作させることができました。

閉鎖

“C言語何でも質問掲示板” へ戻る