更改MonthCalendar控件的语言

时间:2013-04-19 07:34:24

标签: c# .net winforms

我正在尝试在Windows窗体应用程序中更改“monthcalender”控件的语言。我试过这个:

System.Globalization.CultureInfo ci = 
    new System.Globalization.CultureInfo("fr-FR");

System.Threading.Thread.CurrentThread.CurrentCulture = ci;  

但未能改变语言。

3 个答案:

答案 0 :(得分:2)

使用MonthControl

无法做到。您需要看到:The DateTimePicker and MonthCalendar control do not reflect the CurrentUICulture property of an application's main execution thread when you created a localized application in the .NET Framework, in Visual Studio 2005, or in Visual Studio .NET

  

出现此问题的原因是DateTimePicker控件和   MonthCalendar控件是Microsoft Windows常用控件。   因此,操作系统的用户区域设置决定用户   这些控件的界面。

答案 1 :(得分:2)

MonthCalendar是内置Month Calendar控件的包装器,它不支持用户默认的区域设置。 您可以尝试Culture Aware Month Calendar and DatePicker

答案 2 :(得分:0)

可能 c#程序似乎没有内置支持来支持MonthCalendar control的本地化在MSDN here上找到,指向LOCALE_USER_DEFAULT更改语言。

但是如果你能找到任何方法来改变LOCALE_USER_DEFAULT中C ++应用程序中的语言,那么在运行时更改应用程序,就像从codeproject herehere中找到的那样改变MonthCalendar控制的文化。

我希望它可以帮到你。

更新

我找到了一个VB.NET程序,目的是更改LOCALE_USER_DEFAULT,你必须启用不安全的编程并将其转换为c#(我希望你不介意我不将vb转换为C#)

Reference MSDN Forum Linkone more here for arabic calendar

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
Private Const LOCALE_USER_DEFAULT As Long = &H400
Private Const LOCALE_SSHORTDATE = &H1F

Private Function GetShortDateFormat() As String
Dim lngRet As Long
Dim strValue As String
Dim lngLength As Long
    lngRet = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strValue, lngLength)
    strValue = Space(lngRet)
    lngLength = lngRet
    lngRet = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strValue, lngLength)
    GetShortDateFormat = Left(strValue, lngLength - 1)
End Function

Private Function SetShortDateFormat(ByVal strFormat As String) As Boolean
Dim lngRet As Long
    lngRet = SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strFormat)
    SetShortDateFormat = CBool(lngRet)
End Function

Private Sub Command1_Click()
    MsgBox GetShortDateFormat
End Sub

Private Sub Command2_Click()
    If SetShortDateFormat(Text1.Text) Then
        MsgBox "Short Date Format Changed"
    Else
        MsgBox "Changing Short Date Format failed"
    End If
End Sub