(David Yaw 的评论是正确的,我在 OP 可能需要更明确的说明的基础上写了以下内容。这个答案只是指出了常用的 C++ 技术,而不是 CLI/C++ 或 WinForms 特有的东西。)
根据您的描述,在我看来,您的按钮按下事件函数的主体必须位于相应的头文件中。此外,这#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
是 a ,则在 Form1.hForm2^
中前向声明)Form2
以上将起作用,因为根据您的问题,Form2 中的 Form1 或 Form1 中的 Form2 没有视觉表示(即在表单设计器中)。在这种情况下,只要您在 *.h 中转发声明,并且只在源文件中“使用”(访问成员等)循环依赖类,您就可以在表单/控件之间拥有尽可能多的循环依赖。您可以通过前向声明(包括Form2^
作为成员函数和方法签名)愉快地在 Form1.h 中为 Form2 处理句柄 (^)。