我一直在寻求帮助。到目前为止还没有找到我需要的帮助。
我希望你们可以指导或帮助我=)
我有一个Form1,在form1上我已经在Form1.h中包含了第二个表单文件:Form2.h 所以现在我已经创建了,当按钮处于预告状态时运行:
| Form1.h | Form2 ^ frmProSog = gcnew Form2(); frmProSog-> ShowDialog的();
现在Form2已打开,我用它来搜索数据网格中的字符串。当我选择了结果时,我将单击Form2中的一个按钮,我想在Form1中调用一个函数,该函数将把数据添加到Form1中的另一个数据网格中。
我试图在Form2中包含Form1.h但是我得到一个错误:无法使用给定的参数列表调用参数类型是:(System :: Object ^)
我希望那里有人能够帮助我。在stackoverflow上尝试了以下许多建议,这些建议提醒了这个问题,但没有运气。
答案 0 :(得分:0)
(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
的成员是Form2^
,请在Form1.h中转发声明Form2
上述方法是有效的,因为根据您的问题,Form2中的Form1或Form1中的Form2没有可视化表示(即,在表单设计器中)。在这种情况下,您可以在表单/控件之间拥有尽可能多的循环依赖关系,只要您在* .h中转发声明,并且只在源文件中“使用”(访问成员等)循环依赖的类。您可以愉快地使用前向声明将句柄(^)带到Form1.h中的Form2,包括Form2^
作为成员函数和方法签名。