![]() |
TPanel Visible := True wirkt nicht in TabSheet OnShow
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin erstaunt, dass ich das noch nie bemerkt habe.
(Und auch keinen Workaround finde...) Der Effekt ist jetzt in 10.1 Berlin aufgetreten, aber ein Versuch mit D5 unter Win7 zeigt dasselbe Ergebnis. Um was es geht, steht ja schon im Titel: Ein TPanel auf einem Tabsheet, mit Visible := False statisch erzeugt, soll in der OnShow-Ereignisroutine des Tabsheets sichtbar werden. Wird es aber nicht. Der Versuch, nach Abschluss der OnShow-Routine die Sichtbarkeit herzustellen. funktioniert nur, wenn vorher das nicht sichtbare Panel nochmal ein Visible := False bekommt.
Delphi-Quellcode:
Hat jemand eine Erklärung oder sogar einen guten Rat?
procedure TForm1.TabSheet1Show(Sender: TObject);
begin Panel1.Visible := True; // bewirkt nichts end; procedure TForm1.Button1Click(Sender: TObject); begin Panel1.Visible := False; // nur wenn das vorher aufgerufen wird, Panel1.Visible := True; // wird das Panel sichtbar. end; |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
TabShow1 wird nur bei einem PageControl1Change ausgelöst und die gewünschte Funktionsweise funktioniert erst nach einem Pagewechsel.
Beim drücken des Buttons funktioniert es eigentlich wie gewollt.
Delphi-Quellcode:
Persönlich benutze ich das PageControlChange, die Problematik bleibt aber dieselbe.
procedure TForm1.Button1Click(Sender: TObject);
begin panel1.Visible := True; end; procedure TForm1.TabSheet1Show(Sender: TObject); begin Showmessage('Hallo'); panel1.Visible := True; end; Aus diesem Grund starte ich das Formular meistens mit einer Startprocedure und initialisiere das ganze nach meinen Bedürfnissen;
Delphi-Quellcode:
procedure TForm1.PageControl1Change(Sender: TObject);
begin if PageControl1.ActivePage = TabSheet1 then Action1Execute(Self); end; procedure start; begin Action1Execute(Self); end; |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte jetzt nur Delphi2006 zur Hand, aber da funktioniert es
|
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Zitat:
Sobald es im Tabsheet abgelegt wird, tritt besagtes "Problem" auf. |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Ups, hast Recht. Nicht aufgepasst
|
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Ich kann den Effekt reproduzieren. Als Workaround habe ich es im FormShow zusätzlich eingebaut:
Delphi-Quellcode:
procedure TfrmTesterMain.FormShow(Sender: TObject);
begin Panel1.Visible := (PageControl1.ActivePage = TabSheet1); end; |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Es ist ganz logisch, da das Show-Event nur ausgelöst wird, wenn der Tab "wieder eingeblendet" wird (Tabsheet.show). Wenn ich das gleiche auf z.B. onMouseActivate lege und in die leere Fläche Klicke wird der Code ausgeführt.
Das Problem liegt also nicht darin, das das Panel im Sheet liegt, sondern die Art und Weise des Aufrufs. Du kannst das ganze so "umgehen":
Delphi-Quellcode:
Wenn so etwas für mehrere Seiten gemacht werden muss, kannst du anstatt if auch case nutzen. Mir stellt sich nur noch die Frage nach dem Sinn, da das Panel doch nur sichtbar ist, wenn die Seite auch angezeigt wird oder übersehe ich da etwas!?
procedure TForm1.PageControl1Change(Sender: TObject);
begin if Pagecontrol1.ActivePage = Tabsheet2 then Panel1.Show else Panel1.Hide; end; |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Zitat:
|
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Zitat:
Und ich ergänze das Phänomen: Wenn ich in dem Tabsheet, in dem das Panel liegt, auch einen Button einfüge, der sichtbar ist und folgenden Code beinhalten:
Delphi-Quellcode:
Wird beim einblenden des Tabsheet der Button versteckt (sowie auch alle anderen Komponenten auf dem Sheet)!? (Ein Druck auf den Button hat keinen Effekt)
procedure TForm1.Button1Click(Sender: TObject);
begin Panel1.Show; end; procedure TForm1.TabSheet2Show(Sender: TObject); begin Panel1.Show; end; Kommentiere ich nun das Show-Event aus, bleiben alle Komponenten Sichtbar und der Button funktioniert (blendet das Panel ein). Nutze ich nun anstatt ".show" folgendes:
Delphi-Quellcode:
Funktioniert es einwandfrei! Warum es bei dir jedoch so nicht funktioniert, kann ich dir nicht sagen. Auch war für mich bisher ".visible := True" = ".show" bzw ".visible := False;" = ".hide". Da scheint es auch noch Unterschiede zu geben.
procedure TForm1.TabSheet2Show(Sender: TObject);
begin Panel1.Visible := True; end; |
AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
Ganz interessant ist ja auch dass die Eigenschaft visible des Panles wirklich gesetzt wird. Kann man gut im Button1Click abfragen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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