2017-12-12 36 views
0

小さなテストアプリケーションでComponentResourceManagerを使って遊んでいたのは、以前は手動で実装されていた既存の大きなWinformsアプリケーションで自動的に生成されたローカリゼーションを修正する必要があったからです。リソースファイルは、誰かがフォームデザイナーを開くたびに非表示になることはありません。resources.ApplyResources(...)not working - 思考?

このテストのために、フォームにはボタンコントロールがあります。私は、リソースファイルに格納されているものを使ってボタンのプロパティを設定したい。プロパティを探して直接設定すると、これはうまく動作します。

ResourceManager resourceManager = new ResourceManager("LocalizationTest1.buttonProps", typeof(Form1).Assembly); 
button1.Text = resourceManager.GetString("button1.Text"); 
button1.Location = (Point)(resourceManager.GetObject("button1.Location")); 

ただし、次のようにApplyResourcesを使用しようとすると機能しません。

ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof(Form1)); 
componentResourceManager.ApplyResources(this.button1, "button1"); 

また、リソース名button1.Textとbutton1.Locationの両方がリソースデザイナーでそれらの隣にthe resource name 'button1...' is not a valid identifierを持っていることを関連している可能性があります。

これまでにオンラインで関連するものは何も見つかりませんでしたので、援助の可能性があると思っています。

+0

私の場合、[それは動作します](https://stackoverflow.com/a/46017814/3110834)。結果を見るためにリソースを適用する前に、あなたは文化を変えましたか?あなたのフォームは[ローカライズ可能](https://stackoverflow.com/a/32990088/3110834)ですか? –

+0

フォームはローカライズ可能です。なぜなら、私がCurrentUICultureを変更した場合に言語を適切なresxファイルに変更するためですが、プロパティを直接指定している場合のみです。すなわち、 'button1.Text = resourceManager.GetString(" button1.Text ");'。 ApplyResourcesを使用してオブジェクトをより広範に扱おうとしていません – Justin

+0

[例](https://stackoverflow.com/a/46017814/3110834)で共有したコードを試しましたか? –

答えて

0

コンポーネント・リソース・マネージャがリソース・ファイル名またはルート名を引数として取っていないときに、おそらくこれを実現しているはずです。リソース名は、フォームと同じ名前です。 Form1.cs、Form1.resx、Form1.fr.resxなど

それだけです。

ありがとうHans for the "以前Form1に関連付けられていた.resxファイルがフォームと関連付けられなくなりました。私はあなたがファイルの名前を変更するようなことをしたと思います。コメント。それは解決策を説明していませんでしたが、それは私をそこに連れて来ました。私はこれが、この実現にもっと早く来なかった他の誰かを助けることを願っています。