Как вызвать метод, принадлежащей первой форме, из второй?

Есть две формы MainForm и FrameFirstElem. Вторая форма служит фреймом для компонента sFrameBar1. При создании первой формы, создается вторая форма
FrameFirstElem = new TFrameFirstElem(Application);

Во второй форме в одной из событий вызывается публичный метод из первой формы «MainForm->AnyNameMethod()». Компиляция проходит без ошибок, и в момент события во второй форме, вызывается метод как положено из первой. Но, в этом методе идет обращение к другим методам приватным на первой форме через this. На первом таком this, программа выдает ошибку вида «access violation at … ». Через дебаггер видно что this пустой.
Первая форма .cpp :
#include <vcl.h>
#pragma hdrstop

#include "Main.h"
#include "FrameFirst.h"
…
TMainForm *MainForm;

//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
	: TForm(Owner){}

void __fastcall TMainForm:: AnyNameMethod ()
{
	ShowMessage(this->Name); //Здесь программа падает.
}


Первая форма .h :
…
public: // User declarations
	__fastcall TMainForm(TComponent* Owner);
	void __fastcall AnyNameMethod ();
};

// ---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
// ---------------------------------------------------------------------------
#endif


Вторая форма .cpp
#include <vcl.h>
#pragma hdrstop

#include "FrameFirst.h"
#include "Main.h"
….
TFrameFirstElem *FrameFirstElem;
//---------------------------------------------------------------------------
__fastcall TFrameFirstElem::TFrameFirstElem(TComponent* Owner)	: TFrame(Owner){}
void __fastcall TFrameFirstElem::AnyEvent(…)
{
	MainForm-> AnyNameMethod (); //Вызов происходит успешно!
}
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
Pingvi
@Pingvi Автор вопроса
при создании второй формы поменял атрибут с Application на this, FrameFirstElem = new TFrameFirstElem(this);
Во второй форме присвоил MainForm = (TMainForm *)Owner;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы