Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2012, 10:49   #1
ramis-kzn
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 3
По умолчанию Как коректно закрыть TabSheet

Всем привет. я динамичести создаю вкладки TabSheet.
После достижения определенного числа вкладок, я закрываю самые старые, и у меня вылетает ошибка Access Violation.
Создаю так
Код:
page[a]:=TTabSheet.Create(self);
page[a].PageControl := PageControl1;
...
Обрабатываю так
Код:
if a>3 then page[a-3].free;
Если закоментировать закрытие вкладок то ошибка не возникает
ramis-kzn вне форума Ответить с цитированием
Старый 23.08.2012, 11:16   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Может как-то так
Код:
if a>3 then PageControl1.Pages[a-3].Free;
Хотя не совсем понял что у Вас за массив Page? Возможен выход за PageCount
astecenko вне форума Ответить с цитированием
Старый 23.08.2012, 11:31   #3
ramis-kzn
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 3
По умолчанию

page это массив вкладок
Код:
var
page: array[0..100] of TTabSheet;
ramis-kzn вне форума Ответить с цитированием
Старый 23.08.2012, 12:03   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

время жизни переменной page[a-3] > время жизни объекта TPage
возможно повторное использование (в т.ч. удаление) уже несуществующего объекта => AV

использовать FreeAndNull объяснения читать здесь
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.08.2012, 12:12   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно спокойно обойтися и без массива Page
Код:
var: xTabSchet: TTabSheet;
...
if PageControl1.PageCount=3 then PageControl1.Pages[0].Free;
xTabSchet:=TTabSheet.Create(self);
xTabSchet.PageControl:=PageControl1;
Если изначально есть не удаляемые закладки, то контроль количества и индекс удаляемой с учетом количества не удаляемых закладок
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.08.2012, 17:35   #6
ramis-kzn
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 3
По умолчанию

Всем спасибо разобрался, у меня на вкладке был компонент webbrowser. Я сначала его сделал "дестрой" а потом и вкладку "фри"))
ramis-kzn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать ScrollBar к TabSheet в PageControl fen Компоненты Delphi 11 10.04.2012 19:39
Кнопка закрыть на Tabsheet Молоток Фриланс 3 19.04.2011 07:56
Создать на Tabsheet-е кнопку закрыть Молоток Общие вопросы Delphi 8 18.04.2011 14:21
Как удалить вкладку TabSheet во время выполнения программы SibBear Общие вопросы Delphi 27 18.03.2009 17:28
TabSheet как родитель для формы из DLL - Проблема Leser Общие вопросы Delphi 2 11.01.2009 20:40