更改monthcalendar控件的语言

本文关键字:语言 控件 monthcalendar 更改 | 更新日期: 2023-09-27 18:09:54

我正在尝试更改windows窗体应用程序中的"monthcalender"控件的语言。我试过了:

System.Globalization.CultureInfo ci = 
    new System.Globalization.CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;  

但是没能改变语言

更改monthcalendar控件的语言

不能这样做使用MonthControl。你需要看到:当你在。net框架、Visual Studio 2005或Visual Studio .NET中创建本地化应用程序时,DateTimePicker和MonthCalendar控件不反映应用程序主执行线程的CurrentUICulture属性

发生此行为是因为DateTimePicker控件和MonthCalendar控件是Microsoft Windows的常用控件。因此,操作系统的用户区域设置决定用户这些控件的接口。

MonthCalendar是内置MonthCalendar控件的包装器,该控件不支持用户默认的区域设置。您可以尝试文化感知月日历和日期选择器

是的这是可能的但是似乎有没有内置支持为c#程序支持本地化的月历控制在MSDN这里找到指向LOCALE_USER_DEFAULT更改语言。

但是如果你能找到任何方法来改变LOCALE_USER_DEFAULT中的语言从c++应用程序,在运行时改变你的应用程序,从这里和这里的codeproject中发现,这应该导致改变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