Как перемещаться между формами с помощью кнопок?

Я пытаюсь создать простое приложение для хранения записей, но по какой-то идиотской причине 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 ++.

Любая помощь будет отличной, спасибо.

1

Решение

Я думаю, что у вас есть проблемы с двойное включение.
Вы включаете «frmadd.h», который будет включать «frmview.h» и так далее бесконечно.

Если вам нужно сохранить некоторые данные из второй формы в первую, вы можете использовать property и безопасно перемещаться по формам.
Надеюсь это поможет.

Пс .: я думаю Show Метод нуждается в скобках: Show(),

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

Дайте мне знать, как вы поживаете, и если вам нужна дополнительная информация, я буду рад помочь 🙂

0

По вопросам рекламы [email protected]