Есть две формы 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 (); //Вызов происходит успешно!
}