1010 Stimmen

Delphi/Lazarus: TabSheet auf PageControl dynamisch erzeugen

Tutorial von Stefan Trost | Letztes Update am 21.01.2023 | Erstellt am 29.10.2013

In diesen Tutorial möchte ich euch zeigen, wie ihr mit Delphi oder Lazarus eine beliebige Anzahl von TabSheets auf einem TPageControl dynamisch zur Laufzeit erzeugen könnt.

Dazu möchten wir uns zwei verschiedene Beispiele ansehen. Im ersten Beispiel zeige ich euch, wie ihr einzelne TabSheets dynamisch zu einem PageControl hinzufügen könnt, wenn der Nutzer auf einen Button klickt. Im zweiten Beispiel schauen wir uns an, wie wir eine fixe Anzahl von TabSheets mit dem Erstellen der Form dynamisch erstellen können.

Beispiel 1: Einzelne TabSheets dynamisch zur Laufzeit erzeugen

Im ersten Beispiel haben wir einen Button. Jedes Mal, wenn wir auf diesem Button klicken soll ein neuer TabSheet erzeugt und zu unserem PageControl hinzugefügt werden.

procedure TForm1.Button1Click(Sender: TObject);
var 
  ATabNumber: integer;
  ANewTab: TTabSheet;
  ANewLabel: TLabel;
begin
  ATabNumber := PageControl1.PageCount + 1;

  ANewTab := TTabSheet.Create(PageControl1);
  ANewTab.PageControl := PageControl1;
  ANewTab.Name        := 'Tab' + IntToStr(ATabNumber);
  ANewTab.Caption     := 'Tab ' + IntToStr(ATabNumber);
   
  ANewLabel := TLabel.Create(ANewTab);
  ANewLabel.Name    := 'TabLabel' + IntToStr(ATabNumber);
  ANewLabel.Caption := 'Test';
  ANewLabel.Left    := 20;
  ANewLabel.Top     := 20;
  ANewLabel.Visible := true;
  ANewLabel.Parent  := ANewTab;
end; 

Zunächst erzeugen wir ein neues TabSheet und fügen dieses zu unserem gewünschten PageControl hinzu. Dies ist in unserem Beispiel PageControl1. In der Variablen ATabNumber haben wir uns noch vor dem Erstellen des Tabs die Anzahl der TabSheets auf dem PageControl gemerkt, so dass wir daraus einen eindeutigen Namen ableiten können. Würden wir immer denselben Namen vergeben, würde es eine Fehlermeldung geben.

Ein leerer Tab bringt bekanntlich wenig, deswegen wollen wir anschließend noch beispielhaft ein Label auf das TabSheet setzen. Wichtig ist dabei, dass wir unseren neuen Tab als Parent des neuen Labels einsetzen, damit das Label auch auf das TabSheet gesetzt wird.

Beispiel 2: Feste Anzahl von TabSheets mit dem Erstellen der Form erzeugen

In unserem zweiten Beispiel möchte ich zeigen, wie man eine feste Anzahl von TabSheets schon beim Erstellen des Formulars (OnCreate) zu einem PageControl hinzufügen kann.

procedure TForm1.FormCreate(Sender: TObject);
var
  ANewTab: TTabSheet;
  ATabNumber: integer;
begin
  for ATabNumber := 1 to 10 do begin
    ANewTab := TTabSheet.Create(PageControl1);
    ANewTab.PageControl := PageControl1;
    ANewTab.name        := 'tab' + IntToStr(ATabNumber);
    ANewTab.Caption     := 'Tab ' + IntToStr(ATabNumber);
  end;
end;

Insgesamt werden damit 10 TabSheets auf unserem PageControl erzeugt. Wieder ist es wichtig, eindeutige Namen zu vergeben und die Tabs dem richtigen PageControl hinzuzufügen. Auf ein Label verzichten wir hier, da sich auch in dieser Schleife einfach das Beispiel von oben anpassen lässt.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.