2009-11-19 95 views
7

有一個基本的WinForm問題:默認情況下,爲每個表單或用戶控件(以及designer.cs)創建一個resx文件。這個resx適用於所有的控件和通過UI添加到控件的文本。程序化字符串的表單資源使用情況?

我想知道如果我可以使用相同的resx來添加必須以編程方式使用並基於條件附加到控件的字符串嗎?在任何情況下resx都會被覆蓋,這個自定義字符串會被刪除嗎? 這種情況下遵循的最佳做法是什麼?

+2

不要阻止你,但你可能會對這個「仇恨狂歡」(基於VS 2003)關於ResX文件感興趣:http://www.windojitsu.com/blog/resxsucks.html希望情況會更好現在,但我仍然很害怕直接使用它們。 – BillW 2009-11-19 06:57:14

+1

對於「杯是半滿」的看法(?)也許考慮:http://stackoverflow.com/questions/676312/modifying-resx-file-in-c – BillW 2009-11-19 06:59:14

+0

有趣的鏈接..感謝指出那些BillW – bschandramohan 2009-12-11 15:53:24

回答

2

自動生成的會被覆蓋(我使用的是2005),所以我不會使用相同的文件。我會建議在你的項目中爲這樣的.resx文件創建一個單獨的區域。通常我會爲每個表單創建一個.resx,當然會匹配這個名稱。

編輯:Here是我最近在使用.resx文件本地化應用程序時組織文件/文件夾結構的更詳細的答案。

2

Resources.resx文件中的字符串資源存在一個奇怪的問題。我沒有明顯的方式發現如何使用IDE爲其他語言創建新的資源表。它可以通過手工完成。請按照下列步驟:

  1. 項目+屬性,資源選項卡, 添加要在 程序
  2. 啓動Windows資源管理器中使用的字符串和導航 到項目的屬性文件夾
  3. 複製並粘貼Resources.resx 文件
  4. 將其重命名爲您要使用的文化 。例如: Resources.fr-FR.resx
  5. 返回VS,單擊Solution Explorer窗口中顯示所有文件 圖標
  6. 展開屬性節點,新 資源文件應該是可見的
  7. 權 - 單擊它並選擇「包含在項目 」
  8. 選擇它,在設置自定義工具屬性窗口 = 「ResXFileCodeGenerator」
  9. 驗證生成操作設置爲 「嵌入的資源」

構建您的程序。您應該使用附屬程序集名爲projectname.resources.dll在項目的bin \ Debug目錄中獲得一個新文件夾。這個衛星程序集包含本地化的字符串和表單中的任何本地化資源。測試它的代碼是這樣的:

public Form1() { 
    System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
    InitializeComponent(); 
    textBox1.Text = Properties.Resources.String1; 
} 
+2

在你的表單上,將'Localizable'設置爲'true',然後改變'Language'屬性。 – 2009-12-07 15:06:00

+0

的確我還沒有找到。 ASP.NET項目有菜單工具 - >生成資源文件,但WinForms沒有。我對嗎? – abatishchev 2012-02-15 19:49:25

+0

btw,真的需要'ResXFileCodeGenerator'嗎?默認.resx具有BuildAction = EmbeddedResource,但CustomTool爲空。 – abatishchev 2012-02-15 19:50:11

1

或者你可以試試這個:

添加在主代碼();

using System.Resources;

ResXResourceWriter rw = new ResXResourceWriter("Resources.de-DE.resx"); 
rw.AddResource("String1", "de"); 
rw.Close(); 
... 

更多的文件

轉到bin目錄重複,並移動XML(RESX)文件(S)或許屬性的文件夾。

轉到nobugz後的第5-9步。

+1

皮特,你指的是什麼nobugz帖子? – bschandramohan 2009-12-11 15:54:10