1

在用户更改选项窗口中的语言后,我在更改 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});
    }

由于我从未与代表合作过,因此我不知道错误在哪里。我已经搜索了很多以找到类似问题的解决方案,但我还没有找到与我的问题相匹配的东西。

4

1 回答 1

0

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

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

于 2012-10-01T20:37:33.997 回答