2010-06-22 19 views
2

Le contrôle commun DateTimePicker de Microsoft affiche ShortDate en fonction des paramètres régionaux configurés. L'ordinateur du client est configuré avec une ShortDateFormat année à 2 chiffres (d/M/yy), de sorte que le DateTimePicker montre deux chiffres ans:Win32: Comment empêcher DateTimePicker d'accepter des années à 2 chiffres?

alt text http://i48.tinypic.com/15gxfys.jpg

Lorsque l'utilisateur met l'accent dans le bloc de l'année du sélecteur de datetime, les points Microsoft sur la question, et montre la pleine année à 4 chiffres:

alt text http://i50.tinypic.com/2po5qc7.jpg

Mais l'utilisateur, voulant entrer 1929 comme une année, types une année à 2 chiffres:

alt text http://i46.tinypic.com/2hrltlh.jpg

Et puis quand ils onglet sur ils sont confus lorsque Windows interprète leurs années à 2 chiffres comme entre 1930 et 2029, et il est supposé être 2029:

alt text http://i48.tinypic.com/j139qb.jpg

Le Le client a mis en place une stratégie d'entreprise globale qui impose la configuration des paramètres régionaux Windows pour les années à deux chiffres.

donc comme solution de contournement j'ai besoin de forcer chaque contrôle DateTimePicker à utiliser une date-format personnalisé, en utilisant la pratique DateTime_SetFormat macro:

DateTime_SetFormat(hwnd_DateOfEventPicker, "d/M/yyyy"); 

Cela aide, de sorte que maintenant l'DateTimePicker maintenant montre toujours 4 chiffres année:

alt text http://i46.tinypic.com/2rcpt2q.jpg

le problème est que l'utilisateur peut toujours taper un « invalide » 2 chiffres année:

alt text http://i46.tinypic.com/2hrltlh.jpg

lequel Windows est intpreting encore, selon les règles, comme 2029:

alt text http://i46.tinypic.com/2rcpt2q.jpg

i besoin le sélecteur de date-heure de rejeter années à 2 chiffres.

Si cela ne peut pas travailler, alors je vais être obligé de remplacer tous les DateTimePicker avec 3 boîtes d'édition:

Où je peux couleur invalide numéros rouges, et signaler l'entrée de données invalide par l'utilisateur.

Comment puis-je empêcher DateTimePicker d'accepter les bogues y2k?

+0

Je souhaite à toutes les questions ici ont été aussi bien pensé et organisé comme celui-ci. – Ben313

+1

@ Ben313 L'inconvénient d'une question approfondie est que personne ne peut y répondre. Avec tous les "outs", ou triches, coupés, cela laisse seulement les gens informés sur un domaine de problème assez spécifique. En outre, vous devriez voir l'édition originale - où je dois avoir une diatribe libre; sachant très bien que je les éditerais une minute plus tard. –

Répondre

0

Si vous ajoutez le style de fenêtre DTS_APPCANPARSE, vous pouvez gérer le WM_NOTIFY: un message DTN_USERSTRING et analyser la chaîne vous

+0

Qu'est-ce que ... i ** know ** J'ai édité votre réponse, en ajoutant du texte entre guillemets dans la documentation MSDN, et un lien. Et je sais que j'ai commenté votre réponse, en expliquant pourquoi ça ne marche pas dans mon cas. Et maintenant les modifications, et les commentaires, ont disparu. Et il n'y a même aucune indication que la réponse a été éditée. Le crash de SO a-t-il été annulé? –