我在用户更改选项窗口中的语言后更改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搜索了一个类似问题的解决方案,但我找不到与我的问题相符的东西。
答案 0 :(得分:0)
我认为这是winforms而不是WPF问题,并且您有一个主要表单是从应用程序的主要功能打开的。我改变语言的解决方案是在循环中打开这个表单,只要表单的属性设置为某个语言标识符,就继续循环。如果设置了此属性,则将语言更改为该值,然后进行另一次循环迭代。我将需要复制的所有其他属性从一个表单复制到另一个表单,其中main是表单的位置。
如果在没有设置语言ID的情况下关闭表单,那么我们会像往常一样中断循环并退出应用程序。