更改设置后重新加载UI语言字符串

时间:2012-10-01 19:37:09

标签: c# multithreading user-interface

我在用户更改选项窗口中的语言后更改UI字符串时遇到问题。要更改主窗体的UI字符串,我必须每次都重新启动程序,以便更改生效,但这很烦人。所以我尝试使用委托调用该函数,该函数在保存新设置后在选项窗口中加载主窗口的字符串。该函数在选项窗口中调用,但不会更改主窗口的字符串。

主窗口中的代码

public delegate void CallLoadUIStrings(SupportedLanguages lang);
public CallLoadUIStrings callLoadUIStrings;

public Renamer()
{
     callLoadUIStrings = new CallLoadUIStrings(LoadUIStrings);
}

 public void LoadUIStrings(SupportedLanguages lang)
 {
       try
       {
            switch (lang)
            {
                    #region "DE/JA/FR/ES/NL"
                    case SupportedLanguages.De:
                    case SupportedLanguages.Ja:
                    case SupportedLanguages.Fr:
                    case SupportedLanguages.Es:
                    case SupportedLanguages.Nl:
                         // reads the language file where the ui strings are stored
                        langHelper.Read(RenamerLangOpener.RenamerMainWindow);

                        this.mnuFile.Text = langHelper.Files;
                        this.mnuClose.Text = langHelper.Close;

                        this.mnuEdit.Text = langHelper.Edit;
                        this.mnuUndo.Text = langHelper.Undo;
                        this.mnuCut.Text = langHelper.Cut;
                        this.mnuCopy.Text = langHelper.Copy;
                        this.mnuPaste.Text = langHelper.Paste;
                        this.mnuDelete.Text = langHelper.Delete;
                        this.mnuSelectAll.Text = langHelper.SelectAll;
                     #endregion
            }
       }
       catch (Exception ex) { //exception handling }
}
private void mnuOpt_Click(object sender, EventArgs e)
{
       Preferences opt = new Preferences(this);
       opt.ShowDialog();
} 

选项窗口中的代码

    internal Renamer instance = null;
    public Preferences(Renamer form)
    {
        instance = form;
    }
    public void UpdateUI()
    {
        langHelper.ReadSettingsValues();
        instance.BeginInvoke(instance.callLoadUIStrings,new object[] { langHelper.GetLang});
    }

由于我从未与代表合作过,所以我不知道错误在哪里。 我已经用Google搜索了一个类似问题的解决方案,但我找不到与我的问题相符的东西。

1 个答案:

答案 0 :(得分:0)

我认为这是winforms而不是WPF问题,并且您有一个主要表单是从应用程序的主要功能打开的。我改变语言的解决方案是在循环中打开这个表单,只要表单的属性设置为某个语言标识符,就继续循环。如果设置了此属性,则将语言更改为该值,然后进行另一次循环迭代。我将需要复制的所有其他属性从一个表单复制到另一个表单,其中main是表单的位置。

如果在没有设置语言ID的情况下关闭表单,那么我们会像往常一样中断循环并退出应用程序。