2010-05-27 10 views
1

J'ai une application Winform avec 2 DateTimePicker est sur elle, initialisés comme suit:« dynamique » affichage localisé format DateTimePicker personnalisé

private void InitializeComponent() 
{ 
... 
this._StartDate.Format = System.Windows.Forms.DateTimePickerFormat.Short; 
.... 
// Note: I use a custom format, because I don't want to display seconds 
this._StartTime.CustomFormat = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortTimePattern; 
this._StartTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 
... 
} 

Ma question est: Quand je prends une nouvelle région de « Options régionales et linguistiques Dans le Panneau de configuration, l'affichage _StartDate est mis à jour pour refléter les nouveaux paramètres régionaux, mais le _StartTime ne l'est pas. Pourquoi pas?

MISE À JOUR: Il semble af si le System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortTimePattern n'est pas mis à jour jusqu'à ce que l'application redémarre ... Mais comment se fait la date courte est affiché correctement?

Répondre

1

Le framework .NET essaie d'éviter les changements importants de configuration du système par rapport aux programmes déstabilisateurs. Cette fonctionnalité couvre les dates, heures et informations culturelles. Il le fait en récupérant paresseusement les paramètres et en les mettant en cache afin qu'ils retournent toujours la même valeur.

Vous pouvez réinitialiser ce cache, appelez CultureInfo.ClearCachedData() et TimeZoneInfo.ClearCachedData(). Vous pouvez le faire, par exemple, en écrivant un gestionnaire d'événements pour SystemEvents.UserPreferenceChanged. Que vous devriez le faire est un peu discutable. Il ne nécessite pas de redémarrage, il suffit de redémarrer l'application. Fwiw: la raison pour laquelle DateTimePicker fonctionne différemment est qu'il s'agit d'un contrôle Windows natif. Il ne fait pas de mise en cache comme le fait .NET.