代码之家  ›  专栏  ›  技术社区  ›  S.C. Madsen

自定义日期时间选取器格式的“动态”本地化显示

  •  1
  • S.C. Madsen  · 技术社区  · 15 年前

    我有一个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;
     ...
    }
    

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

    更新: 如果 system.globalization.datetimeformatinfo.currentinfo.shorttimepattern 在重新启动应用程序之前不更新…但为什么短日期显示正确呢?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

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

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

    fwiw:DateTimePicker工作方式不同的原因是它是本机Windows控件。它不像.NET那样做任何缓存。