Einzelnen Beitrag anzeigen

Benutzerbild von cBoB
cBoB

Registriert seit: 6. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#1

PagControl & TabSheet - Refresh erzwingen?

  Alt 19. Apr 2004, 14:41
Hallo Delphianer!

Nachdem ich darauf aufmerksam gemacht wurde, einer Anfrage auch einen aussagekräftigen Titel zu spendieren - hier nun der 2. Versuch
Folgendes Problem:
Während der Laufzeit sollen TabSheets in einem PageControl erzeugt werden - das klappt bereits.
In den TabSheets sollen aber wiederum ComboBoxen erzeugt werden, wie unten hoffentlich noch zu erkennen (Aufruf von DevRep). Dies funktioniert eigentlich auch, bis auf den Schönheitsfehler, dass auf dem ersten TabSheet die ComboBox nicht sofort angezeigt wird, sondern erst nachdem ein anderes TabSheet angeklickt bzw aktiviert wurde und danach dann wieder zurück zum 1. TabSheet gewechselt wird. Damit könnt ich auch noch leben - aber es kann der Fall eintreten, dass nur ein TabSheet erzeugt werden soll, dann kann ich durch das Wechseln die ComboBox auf der ersten Seite nicht mehr zum Erscheinen zwingen. Was könnte ich übersehen haben oder wo liegt bei mir ein Fehler?!

Auszug aus meinem Code:

Delphi-Quellcode:
procedure TForm1.cr_tabs; //TabSheets sollen erzeugt werden
const
  TabTitles: array[0..4] of ShortString = ('Gerät1','Gerät2','Gerät3','Gerät4','Gerät5' );
var
  i: integer;
begin
  for i := 0 to (devcount-1) do //devcount ist globale Variable, Anzahl der TabSheets
    with TTabSheet.Create(Self) do
    begin
      PageControl := Form1.PageControl1; //PageControl1 existiert schon zur Entwurfszeit
      Name := 'ts' + InttoStr(i);
      ShowMessage(Name);
      Caption := TabTitles[i];
      DevRep(PageControl1.Pages[i]); //erzeugt ComboBox auf aktuellem TabSheet, ComboBox wird
                                       //aber auf dem ersten TabSheet nicht sofort angezeigt,
                                       //erst nachdem anderes Tabsheet aktiviert wurde und danach
                                       //wieder zurückgewechselt wird, wird's angezeigt
   end;
end;

procedure TForm1.dest_tabs; //TabSheets werden einer nach dem anderen gekillt.
var
  i: integer;
begin
  for i := (devcount-1) downto 0 do
    with Form1.PageControl1 do
    begin
      Pages[i].Free;
   end;
end;


procedure TForm1.Button1Click(Sender: TObject); //jetzt sollen Tabsheets erzeugt werden!
begin
     dest_tabs; //erstmal alle löschen, für geordnete Verhältnisse
     devcount:=5; //5 Stück sollen erzeugt werden
     cr_tabs;; //jetzt erzeuge sie!
     Form1.PageControl1.Refresh;; //Refresh - nutzt aber nix!
end;

procedure DevRep(Sender: TTabSheet); //ComboBox wird erzeugt
var ListItem: TStrings;
    IndexDList: Integer;
begin
with TCombobox.Create(Sender) do
  begin
    Parent:=Sender;
    top:=12;
    left:=8;
    IndexDList := Items.Add('Gerät1');
  end;

end;

Vielen Dank erstmal fürs durchlesen!
-c-
  Mit Zitat antworten Zitat