异常本地化MenuStrip控件

时间:2015-04-02 11:39:07

标签: c# resources menustrip

我有一个MenuStrip控件,其中包含为多种语言输入的所有翻译。当我尝试动态更改文化时,除了MenuStrip之外,所有控件都在更改语言。这是我专门为MenuStrip使用的代码:

    protected ComponentResourceManager res2;

    private void signOutToolStripMenuItem_Click(object sender, EventArgs e)
    {
        LoginForm login = new LoginForm();
        if (login.ShowDialog() == DialogResult.OK)
        {
            //this is for other controls
            resManager = new ComponentResourceManager(this.GetType());
            this.ApplyResources(this, Thread.CurrentThread.CurrentCulture);

            //this is for MenuStrip
            res2 = new ComponentResourceManager(typeof(MenuStrip));
            this.ApplyResourcesToolStripMenuItem(Thread.CurrentThread.CurrentCulture);
        }

    }

    private void ApplyResourcesToolStripMenuItem(CultureInfo lang)
    {
        foreach (ToolStripItem m in this.menuStrip1.Items)
        {
            //resources.ApplyResources(m, m.Name, lang);
            if (m is ToolStripMenuItem)
            {
                string text = res2.GetString(m.Name + ".Text", lang); //Exception is thrown here
                if (text != null)
                    m.Text = text;
            }
        }
    }

我在本论坛中使用了另一个开发人员的代码示例,并做了一些小改动。 现在,当我在运行时更改文化时,我得到以下异常:

  

发生了'System.Resources.MissingManifestResourceException'类型的未处理异常   mscorlib.dll中

     

其他信息:找不到适合的资源   指定的文化或中性文化。确保   “System.Windows.Forms.MenuStrip.resources”已正确嵌入或   在编译时链接到程序集“System.Windows.Forms”,或者   所需的所有卫星组件都是可加载的并且已完全签名。

我检查了资源文件,并且所有的MenuStripItem都包含所有的翻译/值......

我未能在互联网上找到解决方案,所以非常感谢您的帮助。

提前致谢!

1 个答案:

答案 0 :(得分:0)

因此,由于我是本地化的初学者,因此解决方案比我发布的解决方案容易得多。也许这对其他初学者也有帮助。

因此,我删除了所有实际上令人头疼的代码,并将其替换为以下代码:

Thread.CurrentThread.CurrentUICulture = new CultureInfo(StaticValues.currentCulture);
this.Controls.Clear();
this.InitializeComponent();

它很容易。是的,感谢Adriano Repetti!