AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint

Ein Thema von anse · begonnen am 11. Okt 2008 · letzter Beitrag vom 12. Okt 2008
Antwort Antwort
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#1

TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint

  Alt 11. Okt 2008, 17:59
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)
Ansgar Becker
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint

  Alt 12. Okt 2008, 12:12
2 Workarounds gefunden:

1.

Delphi-Quellcode:
private FWasModified : Boolean

proc PageControl.OnChanging
  FWasModified := OKButton.Enabled

proc PageControl.OnChange
  OKButton.Enabled := FWasModified

2.
Delphi-Quellcode:
proc Form.OnShow
  UpDown.Position := 123;
  PageControl.ActivePage := tabWithUpDownInIt;
  PageControl.ActivePage := firstTab;
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.
Ansgar Becker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz