皆様のお力をお貸しください。
VC++2005 マネージドで開発してる初心者です。
Form1にtextBoxとButtonがあり、Form2にもtextBoxとButtonがあります。
Form1のButtonを押すとForm2が開き、Form2のtextBoxに文字を入力、Form2のボタンを押すとForm2を閉じ、Form2のtextBoxに入力した文字をForm1のtextBoxに表示させたいのですが。。。。
VC++2005のサンプルプログラムの本等とみているのですが、中々みつからずで困っております。
下手な説明で申し訳ございませんが、データを渡せる方法があればお教え下さい。
よろしくお願いします。
--- 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();
}
}
};
επιστημη様 ありがとうございます。
返事が遅くなり申し訳ございません。
上記の通りに書いたのですが、
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_; }
...
}
と 記述したのですがダメなのでしょうか。。。
自分でエラーもわからないバカ者ですが、よろしくお願いします。
> 上記の通りに書いたのですが、
動作確認済のコードなので"あり得ません"。
なんか間違ったことをしています。
> C2039: 'GetUserInput' : 'System::Windows::Forms::Form' のメンバではありません。
> とのエラーが出てきました。
どこで?
エラーが出てきたのは
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();
}
} //カッコ閉じる
と、記述しました。
ほらやっぱり上記の通りに書いて"ない"やん。
× Form^ frm = gcnew Form2();
○ Form2^ frm = gcnew Form2();
あっ・・・ すんませんでした。
書き直したところ、無事できました。
一回見ただけでお分かりになるとは・・・凄い!
の一言しか出てきません!!!
貴重な時間を割いて頂、本当にありがとうございました。
またわからないことがあればよろしくお願いします。
> 一回見ただけでお分かりになるとは・・・凄い!
慣れつか定石です。
"Form2のメソッドが呼べない"ならばコンパイラは
"それをForm2だとは思っていない"てこと。
つまり、型が違ってる。そんだけ。
慣れと定石ですか・・・
まだまだ 経験不足 & 理解不足 って事ですね。
本を読み、プログラムを何回も作って覚えていくようにします。
επιστημη様 本当にありがとうございました。
> 本を読み、プログラムを何回も作って覚えていくようにします。
それ以上にエラー・メッセージを読み理解すること。
C2039: 'GetUserInput' : 'System::Windows::Forms::Form' のメンバではありません。
これだけでどんなミスしたか、わかるじゃない。 → ^^^^
返事が遅くなりました。ちょっと席を外していたもので
エラーメッセージを読んで理解ですか・・・・
まだまだエラーメッセージがちんぷんかんぷんなもので(TT)
少しずつ理解していくようにして参ります。
これからも色々とご指導よろしくお願いします!
ツイート | ![]() |