【问题标题】:How to receive event when user changes system's culture用户更改系统文化时如何接收事件
【发布时间】:2011-01-17 09:17:35
【问题描述】:

当我的应用程序以指定的文化运行时。不要关闭应用程序,用户更改系统的文化,例如:从“。”更改数字小数分隔符。到 ”,”。我的应用程序如何捕获此事件。谢谢。

注意事项: C# 2.0,Windows 窗体。

【问题讨论】:

    标签: c# .net cultureinfo


    【解决方案1】:

    你可以处理SystemEvents.UserPreferenceChanged事件:

    void SystemEvents.UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
    {
        // Regional settings have changed
        if (e.Category == UserPreferenceCategory.Locale)
        {
            ...
        }
    }
    

    【讨论】:

    • 谢谢。但是如何获得新的区域设置呢?
    • 我用代码解决了我的问题:CultureInfo.CurrentCulture.ClearCachedData();
    • @Lu Lu,我不知道那个方法...每天学习一些东西;)
    • 当用户改变系统文化时。 CultureInfo.CurrentCulture 是旧设置,必须调用 CultureInfo.CurrentCulture.ClearCachedData() 清除旧设置并获取新设置。
    • 我遇到了 ClearCachedDate 的问题,发现这个 SO 可以解决问题。我不得不启动一项任务并清除缓存的结果。 stackoverflow.com/questions/1370533/…
    【解决方案2】:

    如果您想跟踪系统语言更改,那么您有 SystemEvents 对象,其中包含您可以附加到的 UserPreferenceChanged 事件。

    示例:

    Microsoft.Win32.SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
    

    如果你想跟踪输入语言的变化(比如在你选择语言时系统尝试的变化),那么你可以使用:System.Windows.Forms.InputLanguage.CurrentInputLanguage

    示例:

    string inputLanguage = System.Windows.Forms.InputLanguage.CurrentInputLanguage.LayoutName;
    

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多