![]() |
Delphi-Version: 10.4 Sydney
FMX TTabControl - TTabItem während der Laufzeit entfernen
Hallo Leute,
habe zwar gesucht aber leider nur viel über die VCL Komponente gefunden. Mein Problem ich bekomme die TTabItems einfach nicht vom Control entfernt. Hat wer eine Lösung oder Tip für mich :-)
Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
begin for x:= 0 to ObjektFrame.TabControlKfzSparte.TabCount -1 do begin if Assigned(ObjektFrame.TabControlKfzSparte.Tabs[x]) then begin ObjektFrame.TabControlKfzSparte.BeginUpdate; ObjektFrame.TabControlKfzSparte.Tabs[x].Free; // RemoveObject(x); ObjektFrame.TabControlKfzSparte.EndUpdate; end; end; //ObjektFrame.TabControlKfzSparte.DeleteChildren; end; for x := 0 to DataModule1.FDQuery_Sonstiges.RecordCount-1 do begin if DataModule1.FDQuery_Sonstiges.FieldByName('Sparten').AsString <> 'KFZ-Kasko (nur bis inkl. Vers. 212-02 zu verw.)' then Temptext:= DataModule1.FDQuery_Sonstiges.FieldByName('Sparten').AsString else Temptext:= 'KFZ-Kasko'; // TabItems der Sparten erstellen Ttab:= TTabItem.Create(ObjektFrame); Ttab.Parent:= ObjektFrame.TabControlKfzSparte; Ttab.Text:= Temptext; ObjektFrame.TabControlKfzSparte.BeginUpdate; ObjektFrame.TabControlKfzSparte.AddObject(Ttab); ObjektFrame.TabControlKfzSparte.EndUpdate; DataModule1.FDQuery_Sonstiges.Next; end; ObjektFrame.TabControlKfzSparte.First(); |
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
Falls das nicht gehen sollte: kann man es einfach Visible := false machen?
|
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
Bin gerade unterwegs und habe kein Delphi zur Hand. Gab es da nicht auch ein .delete für die Tabitems?
Wie auch immer, eine Liste muss man von count-1 Down to 0 durchlaufen, wenn man einzelne Einträge löschen will… |
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
Zitat:
habs gelöst:
Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
begin x:= ObjektFrame.TabControlKfzSparte.TabCount -1; while ObjektFrame.TabControlKfzSparte.TabCount -1 >= 0 do begin ObjektFrame.TabControlKfzSparte.BeginUpdate; ObjektFrame.TabControlKfzSparte.Delete(x); ObjektFrame.TabControlKfzSparte.EndUpdate; dec(x,1); end; end; |
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
Das BeginUpdate/EndUpdate würde ich noch verschieben, damit es nur einmal aufgerufen wird.
Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
begin ObjektFrame.TabControlKfzSparte.BeginUpdate; try x:= ObjektFrame.TabControlKfzSparte.TabCount -1; while ObjektFrame.TabControlKfzSparte.TabCount -1 >= 0 do begin ObjektFrame.TabControlKfzSparte.Delete(x); dec(x,1); end; finally ObjektFrame.TabControlKfzSparte.EndUpdate; end; end; |
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
|
AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
Hatte das auch mal, und bin an ein Problem gestoßen: Falls das der Tab selektiert ist, auf dem sich der Schließen-Button befindet, dann klappt das nicht so wirklich.
Embarcadero im QP so: Wir wollen nicht, dass so etwas geht, weil das das gegen unsere Design-Philosophie verstößt. Trotzdem dann mit TTask hinbekommen... Hier der Weg, wie es gemacht werden sollte:
Delphi-Quellcode:
TTask.Run(
procedure begin TThread.Synchronize(nil, procedure begin TabItem1.DisposeOf; if TabControl1.TabIndex>TabControl1.TabCount-1 then TabControl1.TabIndex:=TabControl1.TabCount-1 end); end); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz