在C#Winform中在运行时更改语言

弗朗兹

我想更改语言,但是在编译时会弹出异常。它说

“找不到适用于指定区域性或中性区域性的任何资源。请确保在编译时已将“ System.Type.resources”正确嵌入或链接到程序集“ mscorlib”中,或者确保所需的所有附属程序集都可加载且完全签。”

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedItem.ToString() == "English")
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("En");
            ChangeLanguage("En");
        }
        else if (comboBox1.SelectedItem.ToString() == "German")
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("De");
            ChangeLanguage("De");
        }
    }


    private void ChangeLanguage(string lang)
    {
        foreach (Control c in this.Controls)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Type));
            resources.ApplyResources(c, c.Name, new CultureInfo(lang));
        }
    }

有什么建议么?

汉斯·帕桑特
 ComponentResourceManager resources = new ComponentResourceManager(typeof(Type));

构造函数的参数是错误的,您要告诉它查找System.Type的资源。这就是为什么它抱怨找不到“ System.Type.resources”的原因。它永远找不到。

您需要传递实际要本地化的表单的类型。使用this.GetType()代替。尽管这可能只是将“选项”表单而不是应用程序中其余窗口本地化。您可以代替Application.OpenForms()。也有必要将本地化应用于所有控件。不仅是表单上的表单,还包括位于面板之类的容器内的表单。从而:

    private static void ChangeLanguage(string lang) {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
        foreach (Form frm in Application.OpenForms) {
            localizeForm(frm);
        }
    }

    private static void localizeForm(Form frm) {
        var manager = new ComponentResourceManager(frm.GetType());
        manager.ApplyResources(frm, "$this");
        applyResources(manager, frm.Controls);
    }

    private static void applyResources(ComponentResourceManager manager, Control.ControlCollection ctls) {
        foreach (Control ctl in ctls) {
            manager.ApplyResources(ctl, ctl.Name);
            applyResources(manager, ctl.Controls);
        }
    }

请谨慎使用类似wiz-bang的功能。在使用您的程序时,实际上没有人更改其母语。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

保存在运行时创建的C#Winform控件

来自分类Dev

在运行时更改WIX安装程序语言

来自分类Dev

在运行时更改应用程序语言

来自分类Dev

在运行时更改ABAP报告语言

来自分类Dev

C#Winform运行时加载Windows Forms Controller库

来自分类Dev

在Android中的WebView中在运行时更改URL

来自分类Dev

在运行时更改Tomcat中的日志记录级别?

来自分类Dev

NSFetchedResultsController-谓词在运行时变量中的更改

来自分类Dev

在运行时更改Drawer中的ProfileImage

来自分类Dev

在运行时在WinForms中制作和更改TableLayoutPanel

来自分类Dev

在运行时更改EditText中的文本样式格式

来自分类Dev

在运行时更改属性文件中的值

来自分类Dev

c#在运行时更改标签(控件)的位置

来自分类Dev

在运行时动态更改Angular 7中的语言环境,而无需重新加载应用程序

来自分类Dev

我可以在C ++中在运行时更改对象的类型吗

来自分类Dev

在C#中,在运行时将属性更改为只读

来自分类Dev

使用 C# 在 Selenium.Webdriver + PhantomJS 中在运行时更改代理

来自分类Dev

在 wpf C# 中在运行时更改标签文本

来自分类Dev

在Windows窗体中更改语言运行时

来自分类Dev

在C#winform中使用Process.Start()运行时,NGEN Display返回的结果与升高的CMD不同

来自分类Dev

在运行时更改字段属性

来自分类Dev

在运行时更改LSApplicationQueriesSchemes

来自分类Dev

Selenium xpath在运行时被更改

来自分类Dev

在运行时更改引导间隔

来自分类Dev

在运行时更改python mro

来自分类Dev

在运行时更改宏的值

来自分类Dev

可以在运行时更改AppDelegate

来自分类Dev

在运行时更改Java类

来自分类Dev

在运行时更改Guice绑定

Related 相关文章

热门标签

归档