我正在尝试创建一个简单的记录存储应用程序,但由于一些愚蠢的原因,c++拒绝让我在添加记录后导航回默认的frmview.h表单。
这是我要执行的代码:
System::Windows::Forms::DialogResult Result = MessageBox::Show(this,String::Format("Record Added for user {0}, Add another?", txtstaffname),"title", MessageBoxButtons::YesNo, MessageBoxIcon::Information);
if(System::Windows::Forms::DialogResult::Yes == Result)
{
//Do something
}
else
{
this->Close;
frmview::Show;
}
当我尝试执行调试器时,我得到以下异常:
11 IntelliSense: a pointer-to-member is not valid for a managed class $PROJECTDIR$frmnew.h 444 12 Application1
现在,我想回到的形式是视图记录形式,也用于去当前的添加记录(frmnewh)形式,我已经在两个形式上包括以下标题:
frmview.h (View Records):
#include "frmadd.h"
#include "frmedit.h"
frmad .h (Add Records):
#include "frmview.h"
我的电脑系统运行的是Windows 8.1,我安装了Visual Studio 2012。NET 4.5)
如果由我来决定,我会用c#或VB。. NET,但是作为作业的一部分,我们必须使用c++。
我想你是有问题的双包含。你包括"frmad .h",它将包括"frmview.h",以此类推。
如果您需要将一些数据从第二个表单保存到第一个表单,您可以使用property
并安全地浏览表单。希望对你有帮助。
p。:我认为Show
方法需要括号:Show()
.
没有看到更多的代码来确定问题,我不得不假设很多,因此多解决方案的答案:
如果多重包含是问题,那么一个预处理器指令只定义/包含如果以前没有包含应该解决问题:将.h文件中的全部内容包装在
中#pragma once
#ifndef HEADERFILENAMEHERE_H
#define HEADERFILENAMEHERE_H
//.....
original header file contents here
//.....
#endif
但是根据你输出的错误,我认为你使用的语法是错误的:看起来你需要调用
frmview->Show(this);
代替
frmview::Show;
另一种可能性是,您可能需要重构代码,使其与以下内容更加内联:
//SecondForm.cpp
#include "StdAfx.h"
#include "FirstForm.h"
#include "SecondForm.h"
System::Void CppWinform::SecondForm::button1_Click(System::Object^ sender, System::EventArgs^ e)
{
FirstForm^ firstForm = gcnew FirstForm();
firstForm->Show();
this->Hide();
}
System::Void CppWinform::FirstForm::button1_Click(System::Object^ sender, System::EventArgs^ e) {
SecondForm^ secondForm = gcnew SecondForm();
secondForm->Show();
this->Hide();
}
让我知道你的进展如何,如果你需要更多的信息,我很乐意帮助:)