![]() |
TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint
Tja, der Betreff sagts eigentlich: Es geht um einen Preferences Dialog. Die Form hat ein PageControl mit 4 Tabs. Ein TEdit auf dem zweiten TTabSheet ist mit einem TUpDown assoziiert.
1. Beim Start ist das erste TTabSheet aktiv. 2. In Form.OnShow wird TUpDown.Position auf sagen wir "10" gesetzt. 3. Danach wird ein OK Button disabled 4. Beim Klick auf den zweiten Tab (auf dem das TEdit sitzt) feuert das TEdit von Geisterhand ein OnChange. Die Implementierung sieht vor, bei OnChange aller Komponenten dieses Dialogs einen "OK" Button auf .Enabled := True zu setzen. Nun wird also beim Klick auf den zweiten Tabsheet der OK Button aktiv, obwohl der Benutzer noch gar nichts geändert hat. Wie kanns? Ich vermute daß das TEdit erst bei Bedarf (= wenn der Tab + das TEdit sichtbar wird) gemalt wird und dabei, in Verbindung mit dem TUpDown, OnChange ausgelöst wird. Aber das scheint irgendwie unlogisch. (Delphi 2007) |
Re: TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint
2 Workarounds gefunden:
1.
Delphi-Quellcode:
private FWasModified : Boolean
proc PageControl.OnChanging FWasModified := OKButton.Enabled proc PageControl.OnChange OKButton.Enabled := FWasModified 2.
Delphi-Quellcode:
Der zweite sieht eher dreckig aus, daher habe ich den ersten bevorzugt, der den Modifikations-Status über das automatische OnChange hinweg "rettet". Der 2. setzt einfach darauf, daß der überflüssige OnChange einmal beim Start direkt ausgeführt wird.
proc Form.OnShow
UpDown.Position := 123; PageControl.ActivePage := tabWithUpDownInIt; PageControl.ActivePage := firstTab; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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