本地化 Windows 窗体并在运行时更改语言

Posted

技术标签:

【中文标题】本地化 Windows 窗体并在运行时更改语言【英文标题】:Localize Windows Forms and Change the Language at Runtime 【发布时间】:2012-10-15 14:29:34 【问题描述】:

我正在关注此链接http://www.dotnetcurry.com/ShowArticle.aspx?ID=174 以。标签/按钮:文本框一切正常,但Datagridview它不起作用。当我检查资源文件时,法语版本和默认版本文本在那里,但是当我执行它时,最后一个版本正在加载..当我从列表框中选择时,它没有显示默认的英语版本。

如何使用上面链接中给出的机制在运行时更改 datagridview 标题文本?

【问题讨论】:

@Roy Dictus:如何使用上面链接中给出的机制在运行时更改 datagridview 标题文本??? 绑定了吗。即名称和值是基础数据源中的列名? 你不能只做 grid.Columns[0].HeaderText = "Whatever" 吗? @Roy Dictus:我在想,最好通过资源文件来做。 @Tony Hopkinson:在设计视图中,我可以分别看到 fench 和英文版本,但是当我执行它时,我只看到一个版本。 【参考方案1】:

该代码只能找到添加到表单的 Controls 集合中的控件。但是 DataGridView 列不会像那样添加,它会添加到 DataGridView 控件中。您需要改进发布的代码,以便它还可以迭代它找到的任何 DGV 的列。像这样:

    private void ChangeLanguage(string lang) 
        var ci = new CultureInfo(lang);
        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
        foreach (Control c in this.Controls) 
            ComponentResourceManager resources = new ComponentResourceManager(this.GetType());
            resources.ApplyResources(c, c.Name, ci);
            if (c.GetType() == typeof(DataGridView)) 
                var dgv = (DataGridView)c;
                foreach (DataGridViewColumn col in dgv.Columns) 
                    resources.ApplyResources(col, col.Name);
                
            
        
    

【讨论】:

@Hans Passant:是的,它也适用于我。我犯的错误,是我分配了不同的数据属性名称......非常感谢。

以上是关于本地化 Windows 窗体并在运行时更改语言的主要内容,如果未能解决你的问题,请参考以下文章

建议重新。 Windows 窗体应用程序 - “本地”和“网络”模式

c#中让Windows窗体只运行一次,并在第二次启动窗体时激活该窗体

更改 iOS 应用本地化运行时间

在运行时本地化 iPad 应用程序

WinForms本地化。如何更改菜单的语言

如何在 java swing 运行时更改语言