none
如何在运行时让日历的显示根据Culture改变 RRS feed

  • 问题

  • 一个窗体中有:一个第三方的日历控件,一个button

    public Form1()
    {
    Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");
    InitializeComponent();
    }
    如果在构造函数中指定当前的语言,那么日历控件显示阿拉伯的时间形式.(这个和希望的一样)

    private void button1_Click(object sender, EventArgs e)
    {
    Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-cn");
    Calendar.Refresh(); //这个没有起作用!
    }

    当窗体起来之后,点button去改变当前的语言,该控件的显示不改变(希望日历控件的时间格式的显示也发生改变).

    请问如何做到在运行时,能够让日历的显示根据Culture改变 ???
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月16日 16:01 .Net基础类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月16日 6:07

答案

  • 你好!
         出现此问题的原因 DateTimePicker 控件和 MonthCalendar 控件都是 Microsoft Windows 公共控件。 因此,操作系统的用户区域设置确定这些控件的用户界面。
         只能通过操作系统的设置来改变这些控件的外观!
     
    周雪峰
    2009年3月16日 12:39
    版主

全部回复

  • 你好
    你的方法是对的,仔细检查一下,是不是其它代码的问题
    知识改变命运,奋斗成就人生!
    2009年3月16日 6:27
    版主
  • 不知道你注意到没有:
    Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");
    需要在InitializeComponent(); 的前面.

    这样生写:
    private void button1_Click(object sender, EventArgs e)
    {
    Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-cn");
    Calendar.Refresh(); //这个没有起作用!
    }
    肯定是没有用的.问题的关键应该在运行时Culture改变了,整个form却没有"刷新".
    可是我却不知道,怎么处理.
    2009年3月16日 6:34
  • 看到了呀,我也用我现在用的第三方日期控件试了,可以通过。我用的是DEV
    知识改变命运,奋斗成就人生!
    2009年3月16日 6:45
    版主
  • 可能有点,我没有特别说明出来,目前我这边的日历控件是基于WPF的.
    2009年3月16日 6:47
  • 你好!
         出现此问题的原因 DateTimePicker 控件和 MonthCalendar 控件都是 Microsoft Windows 公共控件。 因此,操作系统的用户区域设置确定这些控件的用户界面。
         只能通过操作系统的设置来改变这些控件的外观!
     
    周雪峰
    2009年3月16日 12:39
    版主
  • 周雪峰 说:

    你好!
         出现此问题的原因 DateTimePicker 控件和 MonthCalendar 控件都是 Microsoft Windows 公共控件。 因此,操作系统的用户区域设置确定这些控件的用户界面。
         只能通过操作系统的设置来改变这些控件的外观!
     


    周雪峰



     

    这样的解释,曾经别人也告诉过我.我所不明白的是,为什么下面不指定却能够正常的显示呢?(构造器中,在InitializeComponent();之前指定CurrentCulture,即使,不在控制面板中改变区域,也能显示阿拉伯的时间格式.)
    public Form1()
    {
    Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");
    InitializeComponent();
    }
    2009年3月17日 1:45
  • 你好!
         我这样测试了:
     
    public Form1()
    {
    Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");
    InitializeComponent();
    }
    没有显示出阿拉伯的样式来啊!

    周雪峰
    2009年3月17日 11:03
    版主