(David Yawのコメントは正しいです。OPにはより明確な指示が必要になる可能性があるという理由で、以下を書きます。この回答は、CLI/C++またはWinFormsに特に固有のものではなく、通常のC++手法を指摘しているだけです。)
あなたの説明から、ボタンを押すイベント関数の本体はそれぞれのヘッダー ファイルにある必要があるように思えます。さらに、これ#include "Form1.h"
は Form2.h にあり、その逆も同様です。これにより、循環依存と関連する問題が発生します。
簡単な修正方法は、代わりに Form1.cpp および Form2.cpp ソース ファイルにイベント処理メソッドを実装することです。フォーム デザイナーが空のメソッドを作成すると...
public ref class Form 1 : System::Windows::Forms::Form
{
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
}
}
... 次に、ヘッダーから実装を削除します。
public ref class Form 1 : System::Windows::Forms::Form
{
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) ;
}
cpp ファイルにコピー/貼り付けし、ハンドラー本体を追加します。
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ frmProSog = gcnew Form2();
frmProSog->ShowDialog();
}
.h からそれぞれを削除し、#include
代わりに .cpp に入れます。
( のメンバがある場合はForm1
Form1.hでForm2^
前方宣言)Form2
上記は、質問に基づいて、Form2 の Form1 または Form1 の Form2 の視覚的表現 (つまり、フォーム デザイナー) がないため、機能します。この場合、*.h で前方宣言し、ソース ファイル内の循環依存クラスのみを "使用" (メンバーへのアクセスなど) する限り、フォーム/コントロール間で好きなだけ循環依存関係を持つことができます。Form1.h 内の Form2 へのハンドル (^) は、Form2^
メンバー関数やメソッド シグネチャなどの前方宣言を使用して喜んで受け取ることができます。