tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 に登録できますし。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。