• 締切済み

【VC++2005(CLR)】子フォームから親フォームにデータを渡したい

いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005、CLRプロジェクト(C++/CLI)で コーディングしています。 早速ですが、質問させて下記の内容について 質問させてください。 現在、Form1.hからForm2.hをモーダルで呼び出しています。 Form2.h終了時に、Form2.hで保持していたデータをForm1.hに 渡したいのですが、どのようにしたら宜しいでしょうか ※中間ファイルを作って、データ渡しはしない方法でお願いします。  

みんなの回答

  • chie65535
  • ベストアンサー率43% (8519/19367)
回答No.1

Form1かForm2のクラスにPublicなデータメンバーを作成して、それを使う。 ・Form2のOnCloseでForm1のパブリックな変数に値をセット ・Form2で保持しているデータの変数をパブリックにして、Form1でForm2を開いて戻ってきた部分で、Form2を開放する前に、Form2のパブリックな変数から値を引き取る のどちらかの方法を使う。

yuki7091
質問者

お礼

一度、この質問を閉じさせて頂きます。 ご回答して頂き、ありがとうございました。

yuki7091
質問者

補足

ご回答、ありがとうございます。 教え頂いた2番目の方法でできました。 ありがとうございました。 さらに質問なのですが >・Form2のOnCloseでForm1のパブリックな変数に値をセット の場合、 public: System::String^ strForm1_AAA; Form1でpublic変数を宣言しました。 そのとき、Form2でstrForm1_AAAを呼び出すにはどのような コードになるのでしょうか。 (Form1のインスタンス名は何になるのでしょうか。) >・Form2で保持しているデータの変数をパブリックにして、 >Form1でForm2を開いて戻ってきた部分で、 >Form2を開放する前に、Form2のパブリックな変数から値を引き取る の場合、 Form2で、public: System::String^ strForm2_AAA; を宣言しました。 そして、Form1でForm2を呼び出すため、Form1内の関数で 以下のようにコーディングしました。 private: System::String^ GetForm2Data(){  Form2^ form2_01   = gcnew Form2();  Form2_01->ShowDialog(this);  String^ aaa = form2_01->strForm2_AAA;  return aaa; } この場合、この関数を出たときに、インスタンスform2_01は 破棄されるでしょうか。 確認のため、以下のソースを書きました。 private: System::String^ GetForm2Data(){  Form2^ form2_01   = gcnew Form2();  Form2_01->ShowDialog(this);  delete form2_01;  aaa = form2_01->strForm2_AAA;  return aaa; } この場合、form2_01をdeleteにも関わらず、 aaaに値が格納できます。 何故でしょうか。 大変お手数かと思いますが、よろしくお願い致します。

関連するQ&A

  • 【VC++2005(CLR)】ファイルが他で使用されていると、落ちてしまう

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 質問のタイトルをもう少し具体的に説明しますと、 あるファイルを開きっぱなしにして、 そのファイルを読みにいこうとするとプログラムが落ちてしまいます。 これを回避するにはどうしたら宜しいでしょうか? もし、読みたいファイルが使用中でも、使用終了されたら、 すぐにそのファイルを読みに行くことは可能でしょうか? お手数ですが、よろしくお願いします。

  • 【VC++】MFC、C++/CLI(CLR)、C#の違い、及び、これからの展望

    いつも大変お世話になっています。 VC++初心者です。 VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を 同時期に使い始めて何ヶ月か経ちました。 現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、 逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。 (CLIの開発では、WEBにあるC#のコードを参考にしながら、  コーディングしています。) そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。 (1)CLIとC#を区別した理由は何なのでしょうか。 (2)MFCはこれからも使われるのでしょうか。  (MFCで新規開発をすることは、まだまだ大勢なのでしょうか。) (3)VC++2005以降、MFCは有償らしいのですが、  VC++6.0(MFC)とVC++2005(MFC)は何か変わったのでしょうか。  (コーディングしやすくなっていますか?) (4)個人差はあると思いますが、開発スピードが一番早いのは、  CLR、C#、MFCのどれでしょうか。   すぐに返信ができないと思いますが、 宜しければ、ご回答頂けると幸いです。

  • 【VC++2005(CLR)】データセットのデータを直接変更したときのデータチェックについて

    VC++2005初心者です。 現在、VC++2005 Express Edition、CLRでプロジェクトをつくって コーディングしています。 CSVファイルをデータセットを使用して画面に表示していますが、 ユーザが直接、そのデータセットを編集できるようにしようと思います。 この場合、ユーザが入力したデータがそのセルに対して有効なセルか (型があっているか、などの条件を満たしているか)チェックを したいのですが、具体的にどのようにしたら宜しいでしょうか。 上記を内容に関連して、ユーザが新規行を追加した場合、 その行が有効なデータかチェックする方法を教えて頂けませんでしょうか。 お手数ですが、よろしくお願いします。

  • 【VC++2005(CLR)】ラベルやテキストボックスの背景色を変化させたい

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトで コーディングしております。 ラベルやテキストボックスの背景色を変えるには どうしたら宜しいでしょうか。 以下のようにコーディングしたのですが、色が変わってくれません。 他に何か設定が必要なのでしょうか。 label->ResetBackColor(); label->BackColor.Red;

  • 【VC++2005(CLR)】フォームを拡大後、ボタンなどを均等に配置するには?

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 現在フォームを拡大すると、拡大前と同じ場所にボタンや ラベルが配置されています。 (拡大後、右隅にラベル、ボタンが配置されます。) これをフォーム拡大と同時に、拡大後のフォームに拡大前と同じ間隔の 比率でボタンやラベルを均等配置するにはどうしたらよろしいでしょうか? これに付随して、フォームをある大きさまで縮小させたくありません。 それを実現するにはどうしたら宜しいでしょうか。

  • 【VC++2005(CLR)】lzh形式で、圧縮、解凍したい

    いつもお世話になっております。 VC++初心者です。 現在、VC++2005 ExpressEditon CLRプロジェクトで コーディングしいます。 あるボタンをクリックすることで、指定したファイルaaa.txtを lzh形式で圧縮するようにするには、どのようにしたら宜しいでしょうか。 そして、ある指定したファイルbbb.lzhを解凍するには どのようにしたら宜しいでしょうか。 お手数ですが、サンプルソースを紹介して頂きたくお願いします。

  • 【VC++2005(CLR)】1つのダイアログに複数のまとまったデータ群を載せたい

    VC++初心者です。 現在、CLRのプロジェクトでコーディングしています。 表題の件について、具体的にどのように設計していけばよいのか (画面設計で利用したほうがよいフォームの種類など) ご教授いただきたくお願いします。 (どんな方針で設計していけばよろしいでしょうか) (主に画面設計について伺いたいです。) やりたいことはこんなイメージの内容です。 *********************** ・1つのダイアログに複数の外国為替のデータを載せたい。 ・1つの国が持つデータは、その国の国旗画像データ、その日の最高値、最安値、平均値、現在値を表示させたい ・1つのダイアログに、20国のうち1~4つの国のデータを表示させたい。 ・1国表示なら、ダイアログ全体にさせたい ・2国表示なら、そのダイアログの上下にさせたい ・3,4国表示なら、上下左右を4分割させて表示させたい。 *********************** (画面設計では、Panelを使って国ごとに1つずつ割り当てて  あげればいいのかな、などと考えていますがどうでしょうか。  参考になるページを教えていただけると幸いです。)

  • 【VC2005(CLR)】モードレスで呼んだダイアログの閉じ方

    VC2005初心者です。 現在CLRのプロジェクトでコーディングしてますが、 モードレスで呼んだダイアログの閉じ方が分かりません。 ご存知の方、よろしくお願いします。 ちなみに自分自身のダイアログを閉じるのは this->Close(); なので、以下のように書いたのですが、閉じてくれません。 ※showFlag = 0;を大域変数で宣言しておきます。 AAA^ formAAA = gcnew AAA(); if(showFlag ==0){ AAA^ formAAA = gcnew AAA(); formAAA->Show(this); showFlag = 1; } else{ formAAA->Close(); showFlag = 0; }

  • 【VC++2005(CLR)】ダイアログ呼び出し元ダイアログを手前に表示させたい

    VC++初心者です。 現在、VC++ express edition、CLRプロジェクトでコーディングしております。 いろいろな方の力を借りて、モードレスでダイアログ(子ダイアログ)を 呼び出しだすことができました。ありがとうございました。 しかしながら、常にその子ダイアログが呼び出し元ダイアログ(親ダイアログ)の手前に 表示されてしまいます。 各ダイアログがクリックされるたびに、クリックされたダイアログが手前に表示する ようにできませんでしょうか。 よろしくお願いします。

  • 【VC++2005(CLR)】マルチスレッドを使用したソースについて

    いつも大変お世話になっています。 VC++初心者です。 現在、VC++2005 CLRプロジェクト(C++/CLI)で コーディングしています。 マルチスレッドを使おうと思い、他のページを参照して 以下のソースを書くと 以下のエラーメッセージが出ました。 どのように対処すればよいか、ご教授頂けませんでしょうか。 エラーメッセージ >delegate コンストラクタの引数が無効です。デリゲート ターゲットはメンバ関数のポインタである必要があります。 ****************** private: System::Void ProjectA_Shown(System::Object^ sender, System::EventArgs^ e) {  System::Threading::Thread^ t =   gcnew System::Threading::Thread(   gcnew System::Threading::ThreadStart(SendData()));  t->IsBackground = true;  t->Start();  t->Join(); } private: System::Void SendData(){  //データを送る処理 } ****************** ※表示のため先頭に全角スペースを入れています。 以上、よろしくお願いしたします。

専門家に質問してみよう