![]() |
Alle Tabs eines PageControls schließen
Hallo ich möchte gans gerne alle Tabs meines Page controls schließen bis auf das erste Tab.
Ich hatte da auch was gemacht und das funzt nicht ich bekomme dann einen Zugriffsfehler aber ich weiß nicht warum. Eigentlich müsste das so funktionieren
Delphi-Quellcode:
begin
// don't close the first tab PageControl3.ActivePageIndex:=PageControl3.PageCount-1; while PageControl3.ActivePageIndex > 0 do begin if PageControl3.ActivePageIndex > 0 then begin if PageControl3.ActivePage.Controls[0] is TSynEdit then begin // Free (TSynEdit(PageControl3.ActivePage.Controls[0])).free; HTMLEDIT := nil; // Free active Tab PageControl3.ActivePage.Free; end; PageControl3.ActivePageIndex:=PageControl3.ActivePageIndex-1; end; end; PageControl3Change(html); end; |
Re: Alle Tabs eines PageControls schließen
:hi: hi!
warum machst du es dir so umständlich, würds nicht auch so gehn?
Delphi-Quellcode:
Natürlich musst du dein PageControl anpassen ;)
var
i: Integer; begin i := PageControl1.PageCount -1; If i <= 0 then exit; repeat PageControl1.Pages[i].Destroy; Dec(i, 1); until PageControl1.PageCount = 1; end; Durch aufrufen von Destroy werden alle auf der Seite des PageControl abgelegten Kompos gleich mit zersört/speicher freigegeben. mfg phlux :hi: |
Re: Alle Tabs eines PageControls schließen
mmmm stimmt so gehts natürlich auch danke
|
Re: Alle Tabs eines PageControls schließen
NIEMALS!!!! .Destroy direkt aufrufen -
|
Re: Alle Tabs eines PageControls schließen
stimmt ersetze destroy durch free ;)
|
Re: Alle Tabs eines PageControls schließen
Zitat:
|
Re: Alle Tabs eines PageControls schließen
Also für noch besser halte ich es die Tabs nicht zu löschen, sondern sie bestehen zu lassen und sie nur aus dem PageControl zu entfernen:
Delphi-Quellcode:
var
i: Integer; begin i := PageControl1.PageCount -1; If i <= 0 then exit; repeat PageControl1.Pages[i].PageControl:=nil; Dec(i, 1); until PageControl1.PageCount = 1; end; |
Re: Alle Tabs eines PageControls schließen
Den Code kann man aber noch verbessern:
Zitat:
Delphi-Quellcode:
mfg
var
i: Integer; begin for i := PageControl1.PageCount -1 downto 1 do begin PageControl1.Pages[i].Free; end; end; Christian //Edit: Hilfe. Ich bin ja viel zu spät! Ich dachte DP hätte n eingebauten "Schutz" gegen sowas. :gruebel: Jedenfalls bakam ich sonst als die Nachricht, dass zwischendurch gepostet wurde |
Re: Alle Tabs eines PageControls schließen
Free is nich sicherer als Destroy
aber Free sorgt dafür das alle möglichen speicherbereiche und deinitialisierungs routinnen vom object aufgerufen werden und als letztes .Destroy aufruft - ums mal ganz einfach auszudrücken sicher könnte man .destroy auch direkt aufrufen, aber es wird dann vllt der speicher nicht freigegeben und kann so zu memleaks führen </klugscheiß> |
Re: Alle Tabs eines PageControls schließen
Zitat:
Werden die Tabs denn dann noch vom PageControl gefreed, wenn sie ausm PageControl entfernt sind? mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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