antarey Опубликовано 17 августа, 2022 Опубликовано 17 августа, 2022 Добрый день. Помогите побороть 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 Подскажите где я накосячил. Заранее благодарен Цитата
0 Slym Опубликовано 17 августа, 2022 Опубликовано 17 августа, 2022 (изменено) вангую в что frmEditor - переменная негде не присвоенная... нужно либо при создании TfrmNewArticleList передавать ссылку на текущий frmEditor, или по Parentам искать его вниз EditorWorkFrame->Parent = EditorFrameLayout; EditorWorkFrame->frmEditor = this; EditorWorkFrame->Align = TAlignLayout::Client; Изменено 17 августа, 2022 пользователем Slym Цитата
0 antarey Опубликовано 18 августа, 2022 Автор Опубликовано 18 августа, 2022 14 часов назад, Slym сказал: EditorWorkFrame->frmEditor = this; правильно frmEditor = this; А можно в двух словах что ето делает? Цитата
1 krapotkin Опубликовано 18 августа, 2022 Опубликовано 18 августа, 2022 записывает ссылку на себя в эту переменную. в целом, более удачным видится создание не панелей а фреймов, хотя, возможно, в вашем примере это лишь заглушка. еще: как-то так сложилась практика, что владельцем создаваемых компонентов является форма или фрейм, а не Application. это логично, потому что компоненты уничтожаются вместе с формой, на которой размещены. Именно за это отвечает параметр Owner. Цитата
Вопрос
antarey
Добрый день.
Помогите побороть access violation
Есть главная форма frmMain, на ней лежит панелька rootLayout.
По кнопкам создаю фреймы:
На фрейме frmEditor тоже есть панелька ItemsListRootLayout и в етом фрейме я создаю дополнительные фреймы
На фрейме frmNewArticleList лежит ListBox привязан к таблице( пробовал через грид таже ошибка) и есть обработчик
В результате при клике на итеме получаю access violation
Подскажите где я накосячил.
Заранее благодарен
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.