1

我正在尝试创建一个简单的记录存储应用程序,但由于某些愚蠢的原因,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

现在我要返回的表单是查看记录表单,它也用于转到当前的添加记录 (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++。

任何帮助都会很棒,谢谢。

4

2 回答 2

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();               
}

让我知道您的进展情况,如果您需要更多信息,我将很乐意为您提供帮助:)

于 2014-03-28T16:09:18.500 回答
0

我认为您在双重包含方面遇到了问题。您正在包括“frmadd.h”,其中将包括“frmview.h”等等。

如果您需要将一些数据从第二个表单保存到第一个表单,您可以使用property并安全地浏览表单。希望这可以帮助。

Ps.:我认为Show方法需要括号:Show().

于 2014-03-27T16:58:25.567 回答