Перейти к содержанию
Fire Monkey от А до Я
  • 0

C++Builder и работа с фреймами


antarey

Вопрос

Добрый день.

Помогите побороть access violation

Есть главная форма frmMain, на ней лежит панелька rootLayout.

По кнопкам создаю фреймы:

private: // User declarations
    TFrame *WorkFrame;
    TPanel* FrameLayout;

// --------------------------------------------------------------------------
void TfrmMain::CreateFrame(String FrameName)
{
    if (FrameLayout != NULL) {
        delete FrameLayout;
    }

    FrameLayout              = new TPanel(Application);
    FrameLayout->StyleLookup = "pushpanel";
    FrameLayout->Name        = "FrameLayout";
    FrameLayout->Parent      = rootLayout;
    FrameLayout->Align       = TAlignLayout::Client;

    if (FrameName == "frmParam") {
        WorkFrame = new TfrmParam(FrameLayout);
    }
    if (FrameName == "frmEditor") {
            WorkFrame                 = new TfrmEditor(FrameLayout);
            WorkFrame->Tag            = 1;
    }

    if (FrameName == "frmAdmin") {
            WorkFrame = new TfrmAdmin(FrameLayout);
    }

    WorkFrame->Parent = FrameLayout;
    WorkFrame->Align  = TAlignLayout::Client;
}

// --------------------------------------------------------------------------

На фрейме frmEditor тоже есть панелька ItemsListRootLayout и в етом фрейме я создаю дополнительные фреймы

    TFrame *EditorWorkFrame;
    TPanel* EditorFrameLayout;
// ---------------------------------------------------------------------------
void TfrmEditor::CreateFrame(String FrameName)
{

    if (EditorFrameLayout != NULL) {
        delete EditorFrameLayout;
    }

    EditorFrameLayout              = new TPanel(Application);
    EditorFrameLayout->StyleLookup = "pushpanel";
    EditorFrameLayout->Name        = "EditorFrameLayout";
    EditorFrameLayout->Parent      = ItemsListRootLayout;
    EditorFrameLayout->Align       = TAlignLayout::Client;

    if (FrameName == "frmNewArticleList") {
        EditorWorkFrame = new TfrmNewArticleList(Application);
..................
    }

...............................
    EditorWorkFrame->Parent = EditorFrameLayout;
    EditorWorkFrame->Align  = TAlignLayout::Client;

}

// --------------------------------------------------------------------------

На фрейме frmNewArticleList лежит ListBox привязан к таблице( пробовал через грид таже ошибка) и есть обработчик

//---------------------------------------------------------------------------
void __fastcall TfrmNewArticleList::NewArticleListItemClick(TCustomListBox * const Sender, TListBoxItem * const Item)
{
    frmEditor->Label2->Text = dm->qLocalContent->FieldByName("title")->AsString;
}
//---------------------------------------------------------------------------

В результате при клике на итеме получаю access violation 

er.png.ad82701ec0ce0c3062422075854e1715.png

Подскажите где я накосячил.

Заранее благодарен

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

вангую в что frmEditor - переменная негде не присвоенная...
нужно либо при создании TfrmNewArticleList передавать ссылку на текущий frmEditor, или по Parentам искать его вниз

EditorWorkFrame->Parent = EditorFrameLayout;
EditorWorkFrame->frmEditor = this;
EditorWorkFrame->Align  = TAlignLayout::Client;
Изменено пользователем Slym
Ссылка на комментарий
  • 1

записывает ссылку на себя в эту переменную.

 

в целом, более удачным видится создание не панелей а фреймов, хотя, возможно, в вашем примере это лишь заглушка.

еще:

как-то так сложилась практика, что владельцем создаваемых компонентов является форма или фрейм, а не Application. это логично, потому что компоненты уничтожаются вместе с формой, на которой размещены. Именно за это отвечает параметр Owner.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...