我正在尝试创建一个简单的记录存储应用程序,但由于一些愚蠢的原因,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
现在我要回到的表单是View Records Form,它也用于获取当前的Add Records(frmnew.h)表单,我在两个表单中都包含以下标题:
frmview.h(查看记录):
#include "frmadd.h"
#include "frmedit.h"
frmadd.h(添加记录):
#include "frmview.h"
我的计算机系统运行的是Windows 8.1,我安装了Visual Studio 2012(.NET 4.5)
如果由我自己决定使用C#或VB.NET,但作为我们任务的一部分,我们必须使用C ++。
任何帮助都会很棒,谢谢。
答案 0 :(得分:0)
我认为你遇到了双重包含的问题。 你要包括“frmadd.h”,其中包括“frmview.h”等等。
如果您需要将某些数据从第二个表单保存到第一个表单,可以使用property
并安全地浏览表单。
希望这会有所帮助。
Ps。:我认为Show
方法需要括号:Show()
。
答案 1 :(得分:0)
没有看到更多的代码来确定问题我不得不承担很多,因此多解决方案的答案:
如果存在多个包含问题,那么仅在以前未包含的情况下定义/包含的预处理器指令应解决问题: 将整个内容包装在
中的.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();
}
让我知道你是如何继续下去的,如果你需要更多信息,我将很乐意提供帮助:)