![]() |
DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Habe ein DateTimePicker auf meinem Formular. Aus Testzwecken wollte ich nun folgendes probieren:
Code:
procedure TFestbearbeit.DateTimePicker2Change(Sender: TObject);
begin Showmessage(datetostr(DateTimePicker2.Date)); end; Seltsamer Weise gibt er mir das Datum einmal aus, wenn ich das Datum per Tastatur angebe. Wenn ich aber via Kalenderdialog ändere, erscheint 2mal das Fenster mit dem angewählten Datum. Wie unterbinde ich das??? Ich will so oder so nur einmal das Fenster sehen!!! ThX im vorraus. |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Keiner eine Ahnung??? :pale:
|
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Delphi-Quellcode:
Was dümmeres fällt mir auf die Schnelle nicht ein.
var
Form1: TForm1; i: Integer; implementation {$R *.dfm} procedure TForm1.DateTimePicker1Change(Sender: TObject); begin i:=i+1; if i = 1 then Showmessage(datetostr(DateTimePicker1.Date)) else i:=0; end; |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Hab das selbe Problem....
Die Idee mit der Schleife ist ja so gesehen ganz nett, aber mich würde eher interessieren WARUM das überhaupt so ist :gruebel: |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Tja, das ist eigentlich ganz einfach: Bei einer Änderung des Datums wird zweimal die Nachricht CN_NOTIFY mit dem Parameter DTN_DATETIMECHANGE an den DateTimePicker gesendet und der ruft dann zweimal die Change-Methode auf. Man könnte das ganze gut und gerne als Bug bezeichnen.
|
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Aber Obacht beim Work-Around: OnChange wird nur zweimal ausgelöst, wenn man ein Datum im Kalender auswählt, aber nicht, wenn das Datum direkt im Edit geändert wird.
Gruss Shaman |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Zitat:
Das Post von Stevie ist eigentlich das, was ich wissen wollte. Obs 'n Bug oder 'n Feature is *g* Als Work-Around nehm ich übrigens einfach OnCloseUp ... Damit gehts ohne weitere Probs ^^ |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
So sollte es auch gehen:
Delphi-Quellcode:
Gruss
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin if not FIgnoreChange then begin ShowMessage('Change'); FIgnoreChange:= DateTimePicker1.DroppedDown end else FIgnoreChange:= False; end; Shaman |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
So sollte es auch ganz gut gehn und nebenbei ein nettes Beispiel, wofür Tag gut sein kann :mrgreen:
Delphi-Quellcode:
[add]
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin if DateTimePicker1.Tag = Trunc(DateTimePicker1.Date) then exit; DateTimePicker1.Tag := Trunc(DateTimePicker1.Date); Showmessage(datetostr(DateTimePicker1.Date)); end; @Shaman das NOT ist doch wohl nicht nötig? einfach mal das Zeug vor und nach dem ELSE tauschen ;) und man glaubt's nicht, aber mann kann massig Variablen einsparen, wenn man mal ein bissl mit Hilfe von Typenumwandlung rumspielt ![]()
Delphi-Quellcode:
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin if LongBool(DateTimePicker1.Tag) then DateTimePicker1.Tag := Integer(False) else begin ShowMessage('Change'); DateTimePicker1.Tag := Integer(DateTimePicker1.DroppedDown); end; end; |
Re: DateTimePicker; OnChange-Ereignis automatisch 2 mal???
Zitat:
Und den Tag spare ich mir für andere lustige Sachen auf :coder: Gruss Shaman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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