2010-05-27 41 views
1

我有2 DateTimePicker的就可以了,初始化爲WinForm應用程序的本地化顯示如下:「動態」定製的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不是。爲什麼不?

UPDATE:這似乎AF如果不更新 System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortTimePattern 直到重新啓動應用程序。但是怎麼來正確顯示短日期?

回答

1

.NET框架試圖避免來自不穩定程序的大系統配置更改。此功能涵蓋日期,時間和文化信息。它通過懶惰地檢索設置並緩存它們,以便它們始終返回相同的值。

您可以重置該緩存,調用CultureInfo.ClearCachedData()和TimeZoneInfo.ClearCachedData()。例如,您可以通過編寫SystemEvents.UserPreferenceChanged的事件處理程序來完成此操作。你是否應該這樣做有點令人懷疑。它不需要重新啓動,只需重新啓動應用就足夠了。

Fwiw:DateTimePicker工作原理不同的原因是因爲它是本機Windows控件。它不像.NET那樣做任何緩存。