На форме form1 есть PageControl1
Закладки (tTabSheet) создаются динамически
в них пихаю, например контролы (tEdit и tButton)
- Код: Выделить всё
procedure form1.newtab;
var
tab : tTabSheet;
wEdit : tEdit;
wClose : tButton;
begin
tab := tTabSheet.Create(PageControl1);
with tab do begin
PageControl := PageControl1;
Width := PageControl1.Width;
Height := PageControl1.Height;
Caption := 'имя вкладки';
end;
//поле ввода
wEdit := tEdit.Create(tab);
with wEdit do begin
AutoSize := true;
Parent := tab;
Left := 15;
Height := 23;
Top := 40;
BorderStyle := bsNone;
ReadOnly := True;
width := 350;
Text := 'содержимое поля';
font.color := clGreen;
font.Bold := true;
end;
//кнопка закрытия
wClose := tButton.Create(tab);
wClose.Parent := tab;
wClose.OnClick := @closewarning;
with wClose do begin
Caption := 'Закрыть';
Top := 70;
Left := 12;
Width := 100;
Height := 29;
end;
//переходим на созданную закладку (фокусируем)
PageControl1.PageIndex := tab.PageIndex;
tab.SetFocus;
end;
на кнопку (которая в табе) вешаю событие @closewarning которое должно закрывать этот самый таб.
из sender вытаскиваю родителя кнопки, а точнее текущий таб из которого нажали кнопку.
теоретически должно всё выглядеть просто. после получения таба, делаю его free, но не тут то было
можно конечно сделать так (и тоже должно сработать) - удаление по индексу из самого pagecontrol1
pagecontrol1.pages[idx].Free;
- Код: Выделить всё
procedure form1.closewarning(Sender: TObject);
var
bb : tbutton;
tab : tTabSheet;
idx : integer;
end;
bb := (Sender as tbutton);
tab := (bb.Parent as ttabsheet); //получаю таб из родителя нажатой кнопки
idx := tab.PageIndex; //получаю индекс текущего таба
//вот тут начинается интересное
tab.free; //либо этот метод
pagecontrol1.pages[idx].Free; //либо этот метод
//оба рабочие, но есть одно НО
end;
оба метода рабочие
- Код: Выделить всё
tab.free; //либо этот метод
pagecontrol1.pages[idx].Free; //либо этот метод
объект, точнее вкладка не хочет удалятся, если она является активной/текущей/видимой/сфокусированной и т.п.
пытался перед удалением перекидывать фокус, индекс, активность на другую вкладку, а также делать текущую вкладку невидимой с перекидываеним всех активностей
не помогает, выскакивает ошибка "Класс исключения External: SIGSEGV по адресу xxxxxx"
хотя если указать индекс (например другой, неактивной и динамически созданной), то удаляется без проблем
например, мы находимся на 6 закладке а удаляем 3, то без проблем
- Код: Выделить всё
pagecontrol1.pages[3].Free
вопрос, что я делаю не так и как удалить текущую (активную) вкладку?