2009-12-03 10 views
11

私は、複数の言語のWinFormsアプリケーションをローカライズしようとしています。私はフォームラベル/ボタンのテキストプロパティを設計者のリソースファイルから読み込むように設定する方法を見つけようとしています(プログラマチックに設定するコードを維持する必要はありません)。リソースファイルのWinForms文字列、デザイナーで結ばれています

私はform.Localizable = trueを設定することができますが、リソースはフォームの横のファイルから読み込まれますが、私の多くは複数のフォームで共有されています。

デザイナーでラベルのテキストをプロジェクトレベルのresxファイルに保存された値に設定する方法はありますか?

+0

デザイナーでこれを行う際に必要なことは何ですか?これをコードで最小限に抑える努力。 – Walter

+0

これで運がありましたか?私もこれが必要です。すべてのフォームを1つのリソースファイルにバインドする必要があります。 –

+0

悲しいことではありません。私はコードで多くのものを結線しています:( –

答えて

0

私が考えることができる唯一の方法は、リソース名のプロパティを追加するカスタムコントロールを作成することです。プロパティが設定されたら、プロジェクトリソースファイルから値を取得し、テキストプロパティを設定します。 Textがシリアル化されないか、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

私は何か類似していると考えましたが、これはファイルごとに1つのresxを持つか、コードで設定するよりも厄介なようです。これを行うには、Localizableプロパティに存在するものからマイナーな調整をするだけで、Resxファイルプロパティも必要とするだけです!:( –

3

私はこれを行う方法を見つけたと思います!

まず、Resources.resxでアクセス修飾子をパブリックに設定します。例えば

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

:デザイナーでその後

は、あなたが適切なコントロールにこれを書くことができるコード(Form.Designer.cs)を生成

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

ps.:Iドン」この解決策がいかに倫理的かを知っていますが、それは機能します!

+3

これはまさに私が避けようとしていたものです。プログラム的にそれらを設定するコードのチャンク " –

関連する問題