• ベストアンサー

子フォームの情報を親フォームに利用する

Visual C++初心者です。visual studio2005を使用しています。 まず親フォームで名前を入力させ、「次へ」を押すと子フォームが出て来ます。 そこで好きな食べ物を入力させて「決定」ボタンを押すと子フォームが閉じ、親フォームのテキストボックスに 「○○さん、こんにちは!好きな食べ物は●●ですね」というメッセージを表示させる・・・というフォームアプリケーションを作りたいのです。 子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。 できれば初心者でも分かる回答をして頂ければ有難く思います。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

 こんばんは。 >>子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。  子フォームの上に決定ボタンがあるのでしょうか。でしたら、子フォームから親フォームに向かって通知してあげないといけません。  以下参考程度に。 //親フォーム側 //変更してはいけないものにはconstをつける public: System::Void PostFrom(const System::String^ sFood) { const System::String^ sName = "○○";//ココを改造しましょう const System::String^ sMiddle = "さん、こんにちは、好きな食べ物は"; const System::String^ sFinish = "ですね。"; textBox1->Text = sName + sMiddle + sFood + sFinish; } //子フォーム側 #include "StdAfx.h" #include "Form1.h" #include "Form2.h" using namespace MyApp; //ボタンが押されたら System::Void Form2::Done(System::Object^ sender, System::EventArgs^ e) { //親フォームにテキストを見せる(constなので変更されない) dynamic_cast<Form1^>(this->Owner)->PostFrom(textBox1->Text); }

その他の回答 (2)

  • gentoo314
  • ベストアンサー率41% (15/36)
回答No.2

親フォームから、子フォームのインスタンスにはアクセスできますよね? それを前提として・・ 子フォームのクラスに、GetFoodName() という関数を作ります。 親フォームは、子フォームが閉じたら、子インスタンスに対してGetFoodName() を呼び出して、食品名を取得します。そのあと、親フォームがテキストボックスに表示する。 ウインドウの表示・終了と、インスタンスの生死のタイミングは異なることに注意しましょう。 子が親のテキストボックスを書き換えたり、親が子の内部を直接のぞくことはやめましょう。

回答No.1

1.グローバル変数  子フォームでグローバル変数に値を設定し、  子フォームが閉じられて親フォームに処理が戻った後に  親フォームがグローバル変数を参照する。 2.子フォームのクラスのコンストラクタに  親フォームのテキストボックスの参照を渡すか、  親フォームのStringの参照を渡して、子フォーム内で変更する。 例) クラスAが親で、クラスBが子 親のテキストボックスの参照を渡す場合 class A { private:   TextBox^ textBox; public:   A(void)   {     textBox= gcnew TextBox();     Form^ f = gcnew B(textBox);   } }; class B { private:   TextBox^ textBox_A; public:   B(TextBox^ tb)   {     textBox_A = tb;   } }; textBox_A->Text に入れた文字列は親にも反映されます。 クラスBでもテキストボックスを別に作り、 テキストの変更イベントや、デストラクタで親のテキストボックスへ 反映するといいでしょう。

関連するQ&A

  • 子フォームでDB更新後、親フォームに戻った際、DBを読み直しするには??

    Visual Basic 2008 DB:Access MDB 親フォームにはDatarepeater があり、DB情報を表示して該当する情報にあるボタンをクリックすると子フォームが表示されます。 子フォームでその行について修正すると親フォームに戻るのですが、子フォームの情報が反映されません。 子フォームを閉じた際、表示されているデータを最新にしたいのですが、再読込みのコーディングを教えてください。

  • 子フォームから親フォームへのデータの受け渡し

    いつもお世話になっております。 VB.NETの質問です。 親フォームから子フォームを開き、子フォームで検索した結果を親フォームに返したいです。 はじめはテキストボックスへ表示させており、何の問題もなく出来ていたのですが、 仕様を変更してコンボボックスやラベルのテキストに表示させるようにしたら、子フォームからデータを取れなくなりました。というか表示されなくなりました。子フォームのme.close()する直前の変数の値にはデータが入っているのですが・・・ なんでなんでしょうか? 開発一筋でやられてきた方には、本当に初歩的な質問だと思いますが、 よろしくお願い致します。

  • 新しいフォームへのデータを渡したい

    Visual studio 2005にてフォームアプリケーションを作成しています。 メインとなるフォーム(form.vb)と、ダイアログ表示用のフォーム(dialog.vb)を使い、メインでの値をダイアログ用のフォームの方で表示させたいのです。 メインのTextBox1にテキストを入力させ、「実行」ボタンを押すとダイアログ表示用フォームが立ち上がり、ダイアログのTextBox1に同じものを表示させたい・・・という寸法です。 できるだけ簡素なコードでこれを行うにはどうすればいいでしょうか? よろしくお願いします。

  • 子フォームから親フォームのオブジェクトを参照したい。

    こんばんわ。 いまVB.Net2005でプログラミングしている者です。 子フォームから親フォームのオブジェクトを参照したいのですが, うまくいきません。 親フォームにListBox1を置き, ここに入力された内容を 子フォームで下記のように参照しようとしました。 Dim 子フォーム As New 子フォーム Label1.Text = 親フォーム.ListBox1.SelectIndex としたのですが, 親フォームでListBox1に0以外のリストを選択したのに, 子側に来ると親フォーム.ListBox1.SelectIndexの値が 0になってしまい,親側での選択内容が反映されません。 どうすれば正しく参照できるでしょうか? 教えてください。よろしくお願いします。

  • MDI:親フォームと子フォームを別EXEで実装するには

    MDIでアプリケーションを作成したいと思っています。 その時に子フォームを親フォームとは別EXEで作りたいと思っています。 例えば 親フォームのボタンを押すと、子フォームEXEが起動し、親フォーム内に表示される。 このようなことは出来ますか? 出来るのでしたら、どうしたらよろしいでしょうか。 教えてください。

  • VisualBasic.NET MDIアプリの子フォーム間のやりとり

    最近VisualBasic.net(2003)を始めた初心者です。 MDIを使ったアプリケーションを作りたいと考えているのですが なかなか進まなくて困っています。 frmA(親フォーム) frmB・formC(子フォーム)を作成して 表示させた後 frmBの中のラベルのテキストや表示を frmCのボタンによって変更したいのですが なかなかうまくいきません。 親フォームからではできるみたいなのですが 子フォームどうしでは できないのでしょうか? ぜひ アドバイスをよろしくお願いいたします。 (説明不足なところは申し訳ございません。)

  • 最大公約数を見つけたい

    C++初心者です。Visual studio 2005を用いてvisual C++の計算フォームアプリケーションを作りたいのです。 2ヶ所のテキストボックスに整数を入力させ、「実行」ボタンを押すとその2つの整数の最大公約数を出力させたいのですが、どうも上手くいきません。 できるだけ簡素なコードで最大公約数を見つけるにはどうすればいいでしょうか? どうかよろしくお願いいたします。

  • 特定の数字でなければエラーを出したい

    こんにちは。 Visual Studio 2005を用いてVisual C++を使ったフォームアプリケーションを作成しています。 3つのテキストボックスA、B、Cとボタンがあります。 テキストボックスに数字(半角)を入力させてボタンを押させるのですが、ボタンを押した時に、 Aは0,1,2 Bは0,1,2,3 Cは0,1,2,3,4 のどれかを入力している時のみOKにして、それ以外の文字や数字を入力していた場合はエラーメッセージを出すようにしたいのです。 できるだけ簡単なコードで記述したいのですが、良い方法があればどうぞよろしくお願いします。

  • [C#]別フォームとの連動について

    Visual C# 2008 を使っています。 子フォームのテキストボックスに書かれた内容を、子フォーム上のボタンを押すことで、親フォームのリストボックスに追加する。 といったプログラムを作成しているところです。 しかし、子フォーム上のボタンのクリックイベントハンドラの中に、 親フォームのリストボックスへ内容を追加するプログラムを書くと、「現在のコンテキスト内には存在しません」とエラーが出てきます。 試してみたことは ・子フォームのコントロールをprivateからpublicに変えた ・子フォーム内から親フォームを参照するためのポインタを指定 ・子フォームの定義部に親フォーム参照のためのポインタを指定 です。 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

  • フォーム上での絞り込みについて

    フォーム上での絞り込みについて 皆様、こんにちは。アクセス初心者です。 以前質問させていただいたのですが、やはり一人で解決できない為、再度皆さんの力をお借りしたいと思います。 フォーム上での絞り込みを設定したいのですが、絞り込みのテキストボックスに データを入力してもQueryのデータが反映されません。 Queryにはフォームのテキストボックスへ入力したデータが反映していますが、Queryのデータがフォームへ反映しません。たまに反映されたかと思うと何かの拍子に又反映されなくなります。 (1)クエリに[forms]![フォーム名]![絞り込みのテキストボックス名]と入力 (2)フォームのレコードソースへ上記のクエリ名、かつ絞り込みのテキストの更新後処理 DoCmd.Requery と記載しています。 大変初歩的な質問で恐れ入りますが、どなたかご教示いただけませんでしょうか? 何卒、よろしくお願いいたします。

専門家に質問してみよう