2012-10-01 88 views
1

用戶更改了選項窗口中的語言後,更改我的UI字符串時出現問題。要更改主窗體的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}); 
    } 

因爲我從來沒有與代表工作,我沒有線索,那裏的錯誤是。 我已經搜索了很多以找到類似問題的解決方案,但我還沒有找到符合我的問題的東西。

+0

你可以顯示打開首選項窗體的代碼嗎? –

+0

private void mnuOpt_Click(object sender,EventArgs e) { Preferences opt = new Preferences(this); opt.ShowDialog(); } – klose91

回答

0

我認爲這是winforms,而不是WPF問題,並且您有一個主要窗體是從應用程序的主要功能打開的。我改變一種語言的解決方案是在一個循環中打開這個表單,並且只要表單的屬性設置爲某種語言標識符,就繼續循環。如果設置了該屬性,那麼我將語言更改爲該值,然後進行另一次循環迭代。我將需要複製的所有其他屬性複製到另一個表單,主要是表單的位置。

如果在沒有設置語言ID的情況下關閉表單,我們會像平常一樣中斷循環並退出應用程序。