我正在尝试更改 Windows 窗体应用程序中“月历”控件的语言。我试过这个:
System.Globalization.CultureInfo ci =
new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
但它未能改变语言。
MonthControl无法做到这一点。您需要查看:当您在 .NET Framework、Visual Studio 2005 或 Visual Studio .NET 中创建本地化应用程序时,DateTimePicker 和 MonthCalendar 控件不反映应用程序主执行线程的 CurrentUICulture 属性
出现此问题的原因是 DateTimePicker 控件和 MonthCalendar 控件是 Microsoft Windows 常用控件。因此,操作系统的用户区域设置决定了这些控件的用户界面。
MonthCalendar 是内置 Month Calendar 控件的包装器,该控件不支持除用户默认设置之外的区域设置。你可以试试Culture Aware Month Calendar 和 DatePicker
是的,这是可能的,但似乎没有对 c# 程序的内置支持来支持MonthCalendar 控件的本地化,如 MSDN 上的此处所示,它指向LOCALE_USER_DEFAULT以更改语言。
但是,如果您可以找到任何方法从 C++ 应用程序更改LOCALE_USER_DEFAULT中的语言,以在运行时更改您的应用程序,如从 codeproject here和here中找到的那样,这应该会导致MonthCalendar
控件的文化改变。
我希望它对你有帮助。
我找到了一个用于更改的 VB.NET 程序LOCALE_USER_DEFAULT
,您必须为此启用不安全编程并将其转换为 c#(如果我不将 vb 转换为 c#,我希望您不介意)
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