プロが教える店舗&オフィスのセキュリティ対策術

Visual C++初心者です。visual studio2005を使用しています。


まず親フォームで名前を入力させ、「次へ」を押すと子フォームが出て来ます。
そこで好きな食べ物を入力させて「決定」ボタンを押すと子フォームが閉じ、親フォームのテキストボックスに
「○○さん、こんにちは!好きな食べ物は●●ですね」というメッセージを表示させる・・・というフォームアプリケーションを作りたいのです。

子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。

できれば初心者でも分かる回答をして頂ければ有難く思います。
よろしくお願いします。

A 回答 (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);
}
    • good
    • 0

親フォームから、子フォームのインスタンスにはアクセスできますよね? それを前提として・・



子フォームのクラスに、GetFoodName() という関数を作ります。
親フォームは、子フォームが閉じたら、子インスタンスに対してGetFoodName() を呼び出して、食品名を取得します。そのあと、親フォームがテキストボックスに表示する。

ウインドウの表示・終了と、インスタンスの生死のタイミングは異なることに注意しましょう。

子が親のテキストボックスを書き換えたり、親が子の内部を直接のぞくことはやめましょう。
    • good
    • 0

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でもテキストボックスを別に作り、
テキストの変更イベントや、デストラクタで親のテキストボックスへ
反映するといいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!