Я пытаюсь создать простое приложение для хранения записей, но по какой-то идиотской причине 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 ++.
Любая помощь будет отличной, спасибо.
Я думаю, что у вас есть проблемы с двойное включение.
Вы включаете «frmadd.h», который будет включать «frmview.h» и так далее бесконечно.
Если вам нужно сохранить некоторые данные из второй формы в первую, вы можете использовать property
и безопасно перемещаться по формам.
Надеюсь это поможет.
Пс .: я думаю 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();
}
Дайте мне знать, как вы поживаете, и если вам нужна дополнительная информация, я буду рад помочь 🙂