«Динамическое» локализованное отображение пользовательского формата DateTimePicker - PullRequest
1 голос
/ 27 мая 2010

У меня есть приложение Winform с 2 DateTimePicker's, инициализированное следующим образом:

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 - нет. Почему нет?

ОБНОВЛЕНИЕ: Кажется, если System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortTimePattern не обновляется, пока приложение не будет перезапущено ... Но почему короткая дата отображается правильно?

1 Ответ

1 голос
/ 27 мая 2010

.NET Framework пытается избежать больших изменений конфигурации системы от дестабилизирующих программ. Эта функция охватывает даты, время и информацию о культуре. Это происходит путем ленивого извлечения настроек и их кэширования, чтобы они всегда возвращали одно и то же значение.

Вы можете сбросить этот кеш, вызвать CultureInfo.ClearCachedData () и TimeZoneInfo.ClearCachedData (). Вы можете сделать это, например, написав обработчик события для SystemEvents.UserPreferenceChanged. Должны ли вы сделать это немного сомнительно. Не требует перезагрузки, достаточно просто перезапустить приложение.

Fwiw: причина, по которой DateTimePicker работает по-другому, заключается в том, что это собственный элемент управления Windows. Кэширование не выполняется, как в .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...