2009-12-03 21 views
11

有線了我試圖本地化多語言WinForms應用程序。我試圖找到一種方法來設置我的表單標籤/按鈕文本屬性從設計器中的資源文件中讀取(而不是必須維護一個編程設置它們的代碼塊)。的WinForms字符串資源文件中,設計師

我發現我可以設置form.Localizable =真,但隨後的資源從旁邊的表格文件中讀取,但許多煤礦在多個形式共享。

有什麼辦法來設置在設計師一個標籤的文本,存儲在項目級的resx文件中的值?

+0

設計師在做這件事後需要什麼?儘量在代碼中做到這一點。 – Walter 2009-12-04 13:47:21

+0

你有沒有這個運氣?我也需要這個。我希望我的所有表單都綁定到單個資源文件。 – 2009-12-09 11:31:22

+0

可悲的是沒有。我用代碼連接了很多東西:( – 2009-12-11 12:10:03

回答

0

我能想到的唯一方法是創建一個自定義控制,將增加一個屬性的資源名稱。在設置屬性時,從項目資源文件中獲取值並使用它設置文本屬性。您需要確保文本不會被序列化,或者它可能會覆蓋由ResourceName設置的值。

public class ResourceLabel 
    : Label 
{ 
    private string mResourceName; 
    public string ResourceName 
    { 
     get { return mResourceName; } 
     set 
     { 
      mResourceName = value; 
      if (!string.IsNullOrEmpty(mResourceName)) 
       base.Text = Properties.Resources.ResourceManager.GetString(mResourceName); 
     } 
    } 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public override string Text 
    { 
     get { return base.Text; } 
     set 
     { 
      // Set is done by resource name. 
     } 
    } 
} 
+0

我想過類似的東西,但是這似乎比每個文件有一個resx或在代碼中設置它們更令人討厭 我很失望,似乎沒有內置方式來做到這一點,似乎只是從Localizable屬性存在的一個小調整,只是它也需要一個Resx文件屬性!:( – 2009-12-04 11:04:58

3

我想我找到了一個辦法做到這一點!

首先在Resources.resx設置訪問修飾符公共。

之後在設計師生成的代碼(Form.Designer.cs)可以寫爲適當的控制:

this.<control>.Text = Properties.Resources.<stringname> 

例如:

this.footerLabel.Text = Properties.Resources.footerString; 

ps.:I別不知道這個解決方案有多麼道德,但它起作用!

+3

這正是我試圖避免:(「而不是必須維護一個以編程方式設置它們的代碼塊「 – 2013-02-01 18:43:40