Blueさん
回答ありがとうございました。大変参考になりました。明日に実装してみたいと思いま
す。
Blueさん
おはようございます。昨日教えてくださったサイトで作成してみたのですがあと一息と
いう所で詰まってしまいました。。
現在、親フォーム(Form1)にtextBox1とbutton1があり子フォームにはtextBox2と
button2があります。Form1でForm2.hをインクルードしてForm2をshowしています。
やりたいことは
Form2のtextBox2に値を入力してForm2のbutton2押下でForm1のtextBox1にtextBox2の値
を入れたいのです。
Form.h
public: System::Windows::Forms::TextBox^ textBox1;
private: Form2^ f2;
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^
e) {
this->f2 = gcnew Form2();
this->f2->Owner = this;
}
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
f2->Show();
}
Form2.h
private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) {
String^ a = this->textBox2->Text;
static_cast<FormTest::Form1^>(this->Owner)->textBox1->Text = a;
}
Form2.cpp
#include StdAfx.h
#include Form2.h
#include Form1.h
上記でコンパイルをかけると
error C2039: 'Form1' : 'FormTest' のメンバではありません。
となってしまいます。よろしければ間違えやアドバイスを頂けると助かります
違いますよ。
Form2.hではForm1の実態がわからないので、インプリメンテーションを記述することは
できません。
ですからForm2.cppをつかって、宣言部分と定義部分を分ける必要があるのです。
つまり
Form2.h
>private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) {
>
> String^ a = this->textBox2->Text;
>
> static_cast<FormTest::Form1^>(this->Owner)->textBox1->Text = a;
>
> }
は宣言のみの
private:
System::Void button2_Click(System::Object^ sender, System::EventArgs^ e);
にし、
Form2.cpp
System::Void Form2::button2_Click(System::Object^ sender, System::EventArgs^ e)
{
String^ a = this->textBox2->Text;
static_cast<FormTest::Form1^>(this->Owner)->textBox1->Text = a;
}
とします。
※Form2にnamespaceがあれば FormTest::Form2 とかにして対応してください。
Blueさん
さっそくのアドバイスありがとうございました。
思い通りの動作をすることが出来ました!Form2.cppをつかって、宣言部分と定義部分を
別ける方法は大変勉強になりました。デバッガー等を利用して子フォームから親フォー
ムへのアクセスについてもっと勉強しようと思います。
せめてスレッドを分けてほしいなぁ。
掲題の質問とは全く内容が違いますし。
今更の感がありますので次からはそうしてください。
後で掲示板を参照する人の事を考えるなら
一つのスレッドは一つの質問で完結させた方が見やすいですよ。
PATIOさん
>>せめてスレッドを分けてほしいなぁ。
>>掲題の質問とは全く内容が違いますし。
>>今更の感がありますので次からはそうしてください。
ご指摘ありがとうございます。次回からは別内容はスレッドを別けるように致しますm(-
-)m