別のフォームにデータを渡すには?

解決


ザザ  2009-02-17 02:36:26  No: 69691

皆様のお力をお貸しください。
VC++2005 マネージドで開発してる初心者です。

Form1にtextBoxとButtonがあり、Form2にもtextBoxとButtonがあります。
Form1のButtonを押すとForm2が開き、Form2のtextBoxに文字を入力、Form2のボタンを押すとForm2を閉じ、Form2のtextBoxに入力した文字をForm1のtextBoxに表示させたいのですが。。。。
VC++2005のサンプルプログラムの本等とみているのですが、中々みつからずで困っております。

下手な説明で申し訳ございませんが、データを渡せる方法があればお教え下さい。
よろしくお願いします。


επιστημη  URL  2009-02-17 18:38:03  No: 69692

--- Form2側

public ref class Form2 : public System::Windows::Forms::Form
{
  ...
    private: 
      String^ userInput_; // 変数追加
      // "ボタン押された"ハンドラ
      System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
        userInput_ = textBox1->Text;
        DialogResult = System::Windows::Forms::DialogResult::OK;
        Close();
      }
    public:
      // メソッド追加
      String^ GetUserInput() { return userInput_; }
};

--- Form1側
public ref class Form2 : public System::Windows::Forms::Form
{
  ...
  private: 
    // "ボタン押された"ハンドラ
    System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
      // Form2を生成し
      Form2^ form = gcnew Form2();
      // モーダル表示。OKだったら
      if ( form->ShowDialog() == System::Windows::Forms::DialogResult::OK ) {
        // ユーザ入力を取得してtextboxへ。
        textBox1->Text = form->GetUserInput();
      }
    }
};


ザザ  2009-02-17 22:31:26  No: 69693

επιστημη様  ありがとうございます。
返事が遅くなり申し訳ございません。

上記の通りに書いたのですが、

C2039: 'GetUserInput' : 'System::Windows::Forms::Form' のメンバではありません。

とのエラーが出てきました。

Form2側に
public ref class Form2 : public System::Windows::Forms::Form
{
public:
    Form2(void)
    {
  InitializeComponent();
  //
  //TODO: ここにコンストラクタ コードを追加します
  //
    }

    private: 
      String^ userInput_; // 変数追加
      
    public:
      // メソッド追加
      String^ GetUserInput() { return userInput_; }
...
}

と  記述したのですがダメなのでしょうか。。。
自分でエラーもわからないバカ者ですが、よろしくお願いします。


επιστημη  URL  2009-02-17 22:40:04  No: 69694

> 上記の通りに書いたのですが、

動作確認済のコードなので"あり得ません"。
なんか間違ったことをしています。

> C2039: 'GetUserInput' : 'System::Windows::Forms::Form' のメンバではありません。
> とのエラーが出てきました。

どこで?


ザザ  2009-02-17 22:55:51  No: 69695

エラーが出てきたのは  
Form1の ボタン押されたハンドラ のところに

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         
   // フォーム2を開く
   Form^ frm = gcnew Form2();
   if ( frm->ShowDialog() ==
                         tem::Windows::Forms::DialogResult::OK )    
   { 
  // ユーザ入力を取得してtextboxへ。
  textBox_ShowDenbun->Text = frm->GetUserInput();
   }

} //カッコ閉じる

と、記述しました。


επιστημη  URL  2009-02-17 22:58:55  No: 69696

ほらやっぱり上記の通りに書いて"ない"やん。

×  Form^ frm = gcnew Form2();
○  Form2^ frm = gcnew Form2();


ザザ  2009-02-17 23:09:14  No: 69697

あっ・・・  すんませんでした。
書き直したところ、無事できました。

一回見ただけでお分かりになるとは・・・凄い!
の一言しか出てきません!!!

貴重な時間を割いて頂、本当にありがとうございました。
またわからないことがあればよろしくお願いします。


επιστημη  URL  2009-02-17 23:12:13  No: 69698

> 一回見ただけでお分かりになるとは・・・凄い!

慣れつか定石です。

"Form2のメソッドが呼べない"ならばコンパイラは
"それをForm2だとは思っていない"てこと。
つまり、型が違ってる。そんだけ。


ザザ  2009-02-17 23:26:49  No: 69699

慣れと定石ですか・・・

まだまだ  経験不足  &  理解不足  って事ですね。
本を読み、プログラムを何回も作って覚えていくようにします。

επιστημη様  本当にありがとうございました。


επιστημη  URL  2009-02-17 23:41:58  No: 69700

> 本を読み、プログラムを何回も作って覚えていくようにします。

それ以上にエラー・メッセージを読み理解すること。

C2039: 'GetUserInput' : 'System::Windows::Forms::Form' のメンバではありません。
これだけでどんなミスしたか、わかるじゃない。  → ^^^^


ザザ  2009-02-18 02:13:51  No: 69701

返事が遅くなりました。ちょっと席を外していたもので

エラーメッセージを読んで理解ですか・・・・
まだまだエラーメッセージがちんぷんかんぷんなもので(TT)

少しずつ理解していくようにして参ります。
これからも色々とご指導よろしくお願いします!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加