ユーザーがオプション ウィンドウで言語を変更した後、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});
}
私はデリゲートと一緒に仕事をしたことがないので、どこが間違っているのかわかりません。同様の問題の解決策を見つけるためにグーグルで検索しましたが、私の問題に一致するものは見つかりませんでした。