Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TabSheet проблемы с удалением, Динамическое создание и удаление закладо 
:(
    Опции темы
mishapk
Дата 12.7.2013, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 26.1.2012

Репутация: нет
Всего: нет



Имеется форма на которой расположен PageControl1, также имеется Frame.
При нажатии на кнопку динамически создаются закладки с Фреймом.

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TTabSheet *NewTabSheet;
   TFrame2 *NewFrame;
   NewTabSheet = new TTabSheet(PageControl1);
   NewTabSheet->Caption = "TabSheet" + TimeToStr(Now());
   NewTabSheet->PageControl = PageControl1;
   NewFrame = new TFrame2(NewTabSheet);
   NewFrame->Parent = NewTabSheet;
   NewFrame->Label1->Caption= "TabSheet" + TimeToStr(Now());
   PageControl1->ActivePageIndex=PageControl1->PageCount-1;

}



На  фрейме расположена кнопка удаления закладки. Удалиение происходит через раз. Часто возникает ошибка.

Цитата

---------------------------
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 40107D8F in module 'vcl60.bpl'. Read of address 009FD94C'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------


Код

void __fastcall TFrame2::Button2Click(TObject *Sender)
{

 if(Form1->PageControl1->ActivePageIndex >= 0)
{
  Form1->PageControl1->ActivePage->Free();

}


}



Подскажите как правильно сделать удаление?
PM MAIL   Вверх
Dem_max
Дата 13.7.2013, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

Form1->PageControl1->ActivePage->Free();

Так никто не удаляет !!!! 
если ты используешь new для создание объекта, то для удаления объекта должен воспользоваться только delete !!!!!!!


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
mishapk
Дата 13.7.2013, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 26.1.2012

Репутация: нет
Всего: нет



Цитата(Dem_max @  13.7.2013,  08:35 Найти цитируемый пост)
Так никто не удаляет !!!! 
если ты используешь new для создание объекта, то для удаления объекта должен воспользоваться только delete !!!!!!! 

Разницы не какой все равно ошибка таже.
PM MAIL   Вверх
mishapk
Дата 13.7.2013, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 26.1.2012

Репутация: нет
Всего: нет



Вся проблем заключается в том что удалить с собственной кнопки не может сам себя. Вікрутился через таймер на главной форме.
Вопрос. Динамически созданный фрейм тоже удалится или останется висеть в памяти?
PM MAIL   Вверх
Dem_max
Дата 15.7.2013, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Ну если ты его удалил через delete то он уничтожется


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
xvr
Дата 6.8.2013, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(mishapk @  12.7.2013,  17:55 Найти цитируемый пост)
  Form1->PageControl1->ActivePage->Free();

Этого делать нельзя. Точнее нельзя удалить активную вкладку - надо сначала с нее уйти куда нибудь (на соседнюю например)

PM MAIL   Вверх
SVN74
Дата 6.8.2013, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Вариант 1:
Вам поможет "PostMessage"  и обработчик в главной форме...
Главная форма должна знать количество и пути доступа к "Табам", как вариант рекомендую "табы" прописать как отдельный класс, потом создавать и удалять используя к примеру тот же "vector"...
Вариант 2:
Самый простой способ использовать TThread и в него в пихнуть события "Sender" как для создания так и для удаления через синхронизацию конечно...

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.