• ベストアンサー

フォーム間のデータの移動

少し分かりにくいかとは思いますが、以下のような動きのするプロジェクトを作成したいと思っています。 ListView1とButton1が配置されているフォームAのButton1をクリックするとListView2が配置されているフォームBが表示され、フォームBのListView2をクリックすると、ListView2のクリックした列のキャプションのデータが、フォームAのListView1のフォーカスのある行に書きこまれる、というようなプロジェクトを作成したいと思っています。 どのようにプログラムを作っていったら良いでしょうか? ご助力よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 C/C++とWin32SDKで作っているのならメッセージを使うのが最も良いと思う。  RegisterWindowsMessage Win32API(2つのEXEの場合)やWM_USER 定数(1つのEXE内の2フォームの場合)をキーワードに探してみよう。  MFCで作っている場合でも、うまく使えば有効だと思うよ。

Caya
質問者

お礼

アドバイス有難うございます。 メッセージを使う…考えもしませんでした^^; 探してみますね

Caya
質問者

補足

すみません、開発環境はBCB6です

その他の回答 (2)

noname#15691
noname#15691
回答No.3

>そこで、まず、フォームAのデータの取得が出来るかどうかを試すため、AnsiString asData = FormA->ListBox1->Items->Strings[FormA->ListBox1->ItemIndex]; というようなソースを記述してみたのですが、ここでエラーが出てしまいました…。 原因は2つ考えられます。 1.ListBox1に文字列が一つも保存されていない。 2.ListBox1の文字列が選択された状態になっていない。 1の場合はListBox1に文字列を登録してください。 2の場合はListBox1中の文字列を選択した状態で試してください。 いずれにしても、ListBox1->ItemIndexが-1になってる(有効な文字列が選択されてない)からだと思われます。

noname#15691
noname#15691
回答No.2

どこまで出来ているのかを書いた方がよいと思います。 フォームBを開くところで躓いているのと、ListView1に書くところだけがわからないのとでは、アドバイスの内容が違います。 ちなみに、ヒントとしてListViewではなくListBoxの例を挙げます。 ListViewはListBoxより複雑なので、下記で行っていることが理解できなければ、ちょっと時間がかかりそうです。 1.FormAでUnitA.hをインクルードする。   FormBでUnitB.hをインクルードする。 2.Button1のクリックイベントでFormBを開く。 void __fastcall TFormA::Button1Click(TObject *Sender) { FormB->ShowModal(); } 3.ListBox2のクリックイベントでListBox1の内容を書き換えてFormBを閉じる。 void __fastcall TFormB::ListBox2Click(TObject *Sender) { FormA->ListBox1->Items->Strings[FormA->ListBox1->ItemIndex] = ListBox2->Items->Strings[ListBox2->ItemIndex]; Close(); }

Caya
質問者

お礼

回答有難うございます。 フォームBを開く事はできたのですが、フォームAにデータを送ることが出来ずにいました。 ヒントを参考にさせていただいて、ソースを書いてみたところ、コンパイルはとおるのですが、実行時にフォームBのListをクリックするとエラーが出てしまいました。 そこで、まず、フォームAのデータの取得が出来るかどうかを試すため、AnsiString asData = FormA->ListBox1->Items->Strings[FormA->ListBox1->ItemIndex]; というようなソースを記述してみたのですが、ここでエラーが出てしまいました…。 もし、よろしければ、引き続きアドバイスを宜しくお願いします。

関連するQ&A