自定义DateTimePicker格式的“动态”本地化显示

时间:2010-05-27 10:46:58

标签: c# winforms datetime localization

我有一个Winform应用程序,上面有2个DateTimePicker,初始化如下:

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;
 ...
}

我的问题是:当我从“控制面板”中的“区域和语言选项”中选择一个新区域时,_StartDate显示会更新以反映新的区域设置,但_StartTime不会。为什么不呢?

更新:如果是,似乎是af     System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortTimePattern 在重新启动应用程序之前不会更新...但是如何才能正确显示短日期?

1 个答案:

答案 0 :(得分:1)

.NET框架试图避免破坏稳定程序的大系统配置更改。此功能包括日期,时间和文化信息。它是通过懒惰地检索设置并缓存它们来实现的,因此它们将始终返回相同的值。

您可以重置该缓存,调用CultureInfo.ClearCachedData()和TimeZoneInfo.ClearCachedData()。例如,您可以通过为SystemEvents.UserPreferenceChanged编写事件处理程序来执行此操作。你是否应该这样做有点可疑。它不需要重启,只需重新启动应用即可。

Fwiw:DateTimePicker的工作原理不同是因为它是一个本机Windows控件。它没有像.NET那样进行任何缓存。