Chers tous,
j'ai un formulaire avec un TDateTimePicker. (BCB6 enterprise) Lorsque l'on change la date, je voudrais effectuer un certain traitement (enregistrer ce qui concerne la date qui était sélectionnée) et annuler la modif en cas d'erreur (remettre la date d'origine dans le TDateTimePicker).
Malheureusement, ca ne marche pas, je ne sais pas remettre la date d'origine après qu'elle aie été sélectionnée.
Cas pour reproduire le souci: simplement essayer de remettre la date à TDate (1,1,1) si une condition est rencontrée dans l'évènement OnChange.
Formulaire:
un checkbox cbError: si checké, il devrait m'empêcher de sélectionner une autre date.
bool m_bIgnoreChange: booléen initialisé à false.
un TDateTimePicker nommé dDate.
J'ai mis le code suivant dans l'évènement OnChange de dDate:
=> cbErrorbox est décoché, je peux mettre la date que je veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void __fastcall TFNewInputStyle::dDateChange(TObject *Sender) { if (m_bIgnoreChange) { m_bIgnoreChange=false; return; } if (IsNan(dDate->DateTime)) return; if (cbError->Checked) { ShowMessage("Modif interdite"); m_bIgnoreChange=true; // un évènement dDateChangeEvent sera déclenché, mais la date ne sera pas acceptée dDate->DateTime=TDate(1,1,1); } }
=> je coche cbErrorBox,
* j'ai un messagebox,
* il passe par le code dDate->DateTime=TDate(1,1,1);
* il passe par if (m_bIgnoreChange)
et rentre dans le test (et donc effectue m_bIgnoreChange=false; puis return; )
* et la date affichée reste celle sélectionnée, il refuse de l'initialiser au 1/1/2001 ou a toute autre valeur...... , et garde la date que je veux empêcher de sélectionner.
Quelqu'un connait-il une autre solution ou un autre composant plus "utilisable" dans un environnement ou un utilisateur peut se tromper?
Merci,
Alain
Partager