タイトル : Re^3: フォーム間のデータのやり取り 投稿日 : 2008/08/19(Tue) 13:56 投稿者 : 魔界の仮面弁士
> FORM1で読み込んだデータをFORM1のListViewに表示しています。 > そのデータから色々と演算処理するのがForm2です。 コンマ区切りのテキストデータを、Form1 で読み込んだ後、 ListView に表示するための「FORM1 で読み込んだデータ」を、 どこで管理しているのかが重要です。 Form1 自身で管理されているのであれば、その「読み込んだデータ」を (A案) Form1 が Form2 に渡す。 (B案) Form2 が、Form1 に問い合わせる。 のいずれかを行う必要がありますよね。 現在は (C案) Form2 でも、Form1 と同様に読み込み処理を行う。 としているようですけれども。 それとも「読み込んだデータ」は、ListView に表示したら、 変数に保持させずに、そのまま読み捨ててしまっているのでしょうか? もしもデータを保持しているのであれば、それを、自作プロパティ経由で渡したり、 あるいは、自作メソッドの引数として受け渡すようにすれば OK かと。 (あるいは、読み込んだデータを ListView 上で管理しているのかな?) > Form1のリストビューの表示内容をForm2で読み取るか、 Form2 が、Form1.ListView1 を直接読み取ったり、 Form1 が、Form2.ListView1 に直接書き込むといった実装は可能ですが、 それはあまり推奨されません。 たとえば、『InputBox』を表示する場合には、 Dim ret As String = InputBox("本文", "タイトル", "初期値") のように書きますよね。すなわち、 Dim fm As Form = 〜〜 fm.Controls("Label").Text = "本文" fm.Text = "タイトル" fm.Controls("TextBox").Text = "初期値" fm.ShowDialog() のように、フォームのメンバーに直接アクセスさせるようにはなっていません。 コントロールを直接操作させるのではなく、コントロールの値を読み書きする プロパティやメソッドを作成するべきです。 (その方が、後からコントロールの追加や変更が行われた場合にも対応しやすいですし) > ですので、今はForm1でもForm2でもデータを読み込んでる状態です。 テキストから読み込んだデータを、DataTable クラスあるいは ListViewItem 配列などに 蓄えておいては如何でしょう。 たとえば DataTable 管理なら、LINQ を使って簡単に集計処理が行えますよね。 あるいは ListViewItem 配列で管理するなら、 Dim data() As ListViewItem = 「読み込んだデータ」 ListView1.Items.AddRange(DirectCast(data.Clone(), ListViewItem())) のようにして、簡単に ListView に登録できますし。 |