我有一个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 在重新启动应用程序之前不会更新...但是如何才能正确显示短日期?
答案 0 :(得分:1)
.NET框架试图避免破坏稳定程序的大系统配置更改。此功能包括日期,时间和文化信息。它是通过懒惰地检索设置并缓存它们来实现的,因此它们将始终返回相同的值。
您可以重置该缓存,调用CultureInfo.ClearCachedData()和TimeZoneInfo.ClearCachedData()。例如,您可以通过为SystemEvents.UserPreferenceChanged编写事件处理程序来执行此操作。你是否应该这样做有点可疑。它不需要重启,只需重新启动应用即可。
Fwiw:DateTimePicker的工作原理不同是因为它是一个本机Windows控件。它没有像.NET那样进行任何缓存。