2

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

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

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

但它未能改变语言。

4

3 回答 3

3

MonthControl无法做到这一点。您需要查看:当您在 .NET Framework、Visual Studio 2005 或 Visual Studio .NET 中创建本地化应用程序时,DateTimePicker 和 MonthCalendar 控件不反映应用程序主执行线程的 CurrentUICulture 属性

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

于 2013-04-19T07:42:03.140 回答
2

MonthCalendar 是内置 Month Calendar 控件的包装器,该控件不支持除用户默认设置之外的区域设置。你可以试试Culture Aware Month Calendar 和 DatePicker

于 2013-04-19T07:48:53.140 回答
0

的,这是可能的,但似乎没有对 c# 程序的内置支持来支持MonthCalendar 控件的本地化,如 MSDN 上的此处所示,它指向LOCALE_USER_DEFAULT以更改语言。

但是,如果您可以找到任何方法从 C++ 应用程序更改LOCALE_USER_DEFAULT中的语言,以在运行时更改您的应用程序,如从 codeproject herehere中找到的那样,这应该会导致MonthCalendar控件的文化改变。

我希望它对你有帮助。

更新

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

参考 MSDN 论坛链接这里还有一个阿拉伯日历

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
于 2013-04-19T08:46:18.373 回答