「覚え間違い」を教えてください!

VC++6.0 ダイアログベースです。
下記のように、親ダイアログクラスから、ボタンコントロールで2つの子ダイアログクラスを呼び出して
いるのですが、自作で作った処理用のクラスを子ダイアログ2から呼び出す場合に
上手く値を渡すことが出来ません。

子ダイアログ2に設定値を送り、その送られてきた設定値を使って自作クラスに値を送ろうと考えてみたのですが、
Dialog2->DoModal(); でエラーとなります。

どの用にしたら、子ダイアログ2から自作関数を呼び出した時も、ダイアログ1で設定された値を使うことができるでしょうか?
よろしくお願いします。

/**親ダイアログクラス***********************************************************:*/
  //■ボタン1が押されたら子ダイアログ1を開く
 CDialog1 *Dialog1;
   Dialog1 = new CDialog1();
   Dialog1->DoModal();//子ダイアログクラス1呼び出し
 

  //■ボタン2が押されたら子ダイアログ2を開く
   CDialog2 *Dialog2;
   if (Dialog1->flag == 1){
     Dialog2 = new CDialog2(Dialog1->m_hoge1,Dialog1->m_hoge2,Dialog1->m_hoge3);
 else{
      Dialog2 = new CDialog2(0,0,0);//設定値が読み込まれていなかったら初期値を送る
 }  
   Dialog2->DoModal();//子ダイアログクラス2呼び出し


  //■ボタン3が押されたら自作クラスを呼び出します。
   //自作クラスを呼び出します。
 CJisaku *jisaku;
   jisaku = new CJisaku();
   //自作クラスの関数呼び出し
   jisaku->ppfm(Dialog1->m_hoge1,Dialog1->m_hoge2,Dialog1->m_hoge3,);
   

/**子ダイアログクラス1**********************************************************/
  //自作クラスで扱う設定値を決めます
  public: 
  int m_hoge1;//呼び出されたらint型の変数m_hoge1に値を入れる。
  int m_hoge2;//呼び出されたらint型の変数m_hoge2に値を入れる。
  int m_hoge3;//呼び出されたらint型の変数m_hoge3に値を入れる。
  Cstring m_hogestring;//呼び出されたらCstring型の変数m_hogestringに値を入れる。
BOOL m_flag;
  //初期値 flag = false;
  //一度でも呼び出されたら flag = true;


/**子ダイアログクラス2********************************************************/
  //自作クラスを呼び出します。
  //コンストラクタ
Dialog2::Dialog2(int a,int b, int c){
   m_a = a;
   m_b = b;
   m_c = c;
}
  jisaku = new CJisaku();
  jisaku->ppfm(m_a,m_b,m_c);//自作クラスの関数呼び出し


/**自作クラス*******************************************************************/
  void ppfm(int a,int b, int c)
  {
  //ここで子ダイアログクラス1で設定した値を使いたい。
  }

A 回答 (1件)

かなりのエスパーを発揮すると



CDialog2のnewは成功していますか?

まずint TEST=Dialog1->m_hoge1として
Daialog1がいきているか確認。

次にDialog2のDoModalの前に
Dialog2の実態が在る(NULLじゃない)ことを
確認してくださいな。


その上でエラーメッセージを載せれば
解決しそう・・・
    • good
    • 0
この回答へのお礼

diolabさんありがとうございました。
とても解り難い質問のしかたで申し訳ございませんでした。
結局ボタン2が押された時の処理を書き換えて、
DoModal()でダイアログを開く前に値を送って保存してみることにしました。
 
次からは、もう少しまとめてから質問するようにします。

 //■ボタン2が押されたら子ダイアログ2を開く
   CDialog2 *Dialog2;

   Dialog2 = new CDialog2();

   if (Dialog1->flag == 1){
    //ダイアログを開く前にGetdata関数に設定値を保存しておく。
    Dialog2->Getdata(Dialog1->m_hoge1,Dialog1->m_hoge2,Dialog1->m_hoge3);//値を送る
   }
   else{
    Dialog2->Getdata(0,0,0);//初期値
   }

   Dialog2->DoModal();//子ダイアログクラス2呼び出し

お礼日時:2007/03/15 08:57

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


おすすめ情報