none
視窗最大化時,利用資源檔方式切換多語後顯示有問題。 RRS feed

  • 問題

  • 我利用資源檔的方式實現多語切換功能,

    但當我在視窗全螢幕(1920x1080)與原資源檔(1366x768)不同時,

    切換語言後視窗維持全螢幕(1920x1080)大小,但內部維持資源檔(1366x768)大小。

    請問有什麼方式可以讓切換語言後的內部尺寸依當前視窗大小顯示呢? 謝謝~

    環境:win10, VS2017

    2019年5月27日 下午 12:39

解答

  • 設定程式欲使用的語系要透過設定Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture, 例如L

    CultureInfo newCulture = CultureInfo.CreateSpecificCulture("en-US");
             Thread.CurrentThread.CurrentUICulture = newCulture;
    

    而且要在Form顥示之前進行設定, 例如放在Main函式, 例如:

    staitc void Main() {

    //在這裏設定 Application.Run(new Form1()); }


    • 已標示為解答 keithshih 2019年6月4日 上午 01:33
    2019年5月30日 上午 12:51
  • 感謝this大回覆。

    後來找到一個方式可以達到我想做的,

    當我在更新UI時只針對有不同語言文字的元件更新就好,

    我自己的有Button, Label等元件有多語文字,其他的就不更新。

    (使用ComponentResourceManager的ApplyResources()更新)

    PS:元件位置與設計不同時還是需要自己移位。

    謝謝~

    • 已標示為解答 keithshih 2019年6月4日 上午 01:33
    2019年6月4日 上午 01:33

所有回覆

  • 您可以在設定Form的Language屬性時設定Form的大小, 切換語言就會用所設定的Form大小
    2019年5月28日 上午 12:44
  • 感謝this大回覆。

    我試著依您所說的,在form-繁中.cs[設計]將size屬性設定為1920x1080,在切換語言為繁中時form內容的確會變為1920x1080。

    但我切換前的form大小如果是1366x768,切換為繁中時form是1366x768,但內容大小會是1920x1080。

    如果我想在切換語言前的form大小為1366x768時,切換後的form及內容大小也是1366x768,

    切換前大小為1920x1080,切換後的form及內容大小也是1920x1080,

    請問有什麼方式可以達到呢?

    我可以在切換時,將目前form大小指定給切換後的form嗎?

    我在resx裡找不到form size的相關參數。

    感謝指點~


    2019年5月28日 上午 03:04
  • 應該是同一個Form, 將語言設定成繁中, 再將大小設定成1366x768, 當程式的語系切換成繁中時, form的大小就會是1366x768
    2019年5月28日 上午 06:23
  • 以下依理解寫的,仍無法動作,可以幫忙看一下有哪裡有問題嗎?

    Form form1;

    form1.Language = "zh-hant";  //繁中

    form1.Size = this.Size;   //指定大小

    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-hant");

    ComponentResourceManager rm = new ComponentResourceManager(form1.GetType());

    foreach(Control ctl in form.Controls)
    {
         rm.ApplyResources(ctl, ctl.Name);
    }

    謝謝

    2019年5月29日 上午 12:59
  • 設定程式欲使用的語系要透過設定Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture, 例如L

    CultureInfo newCulture = CultureInfo.CreateSpecificCulture("en-US");
             Thread.CurrentThread.CurrentUICulture = newCulture;
    

    而且要在Form顥示之前進行設定, 例如放在Main函式, 例如:

    staitc void Main() {

    //在這裏設定 Application.Run(new Form1()); }


    • 已標示為解答 keithshih 2019年6月4日 上午 01:33
    2019年5月30日 上午 12:51
  • 感謝this大回覆。

    後來找到一個方式可以達到我想做的,

    當我在更新UI時只針對有不同語言文字的元件更新就好,

    我自己的有Button, Label等元件有多語文字,其他的就不更新。

    (使用ComponentResourceManager的ApplyResources()更新)

    PS:元件位置與設計不同時還是需要自己移位。

    謝謝~

    • 已標示為解答 keithshih 2019年6月4日 上午 01:33
    2019年6月4日 上午 01:33