2

.designer.cs ファイルで定数文字列を参照するにはどうすればよいですか?

簡単な答えは、.cs ファイルにプライベート文字列変数を作成し、文字列をハードコーディングする代わりに、designer.cs ファイルを編集してこの変数を使用することです。しかし、デザイナーはこれが好きではなく、エラーがスローされます。これが機能しない理由は理解していますが、最良の代替手段が何であるかはわかりません。

各 UI コントロールにプレース ホルダーとしてのテキストだけを含める必要がある場合は、実行時にのみすべてのテキスト プロパティをオーバーライドする必要がありますか? このようにして、デザイナーですべてを表示する利点を失います。

将来物事が変化したときに、混乱を最小限に抑える方法を見つけようとしているだけです。ありがとう。

4

4 に答える 4

6

*.designer.*ファイルは Visual Studio によって生成されます。Visual Studio は時々それらを再生成し、変更を消去する ことがあるため、本当に必要な場合を除き、それらを手動で変更したくはありません。

実際に行う必要があるのは、定数文字列を、フォーム デザイナーが使用できるようにするリソースと考えて、コードを生成するときにそのリソースを使用するようにすることです。

Visual Studio でこれを実現するには、いくつかの方法があります。最も簡単な方法は、おそらくコントロールのデータ バインディングを使用することです。デモとして、フォームにラベル コントロールを配置し、コントロールのプロパティを確認します。プロパティを名前で並べ替えると、括弧で囲まれたリストの上部に と の 2 つのプロパティが表示され ApplicationSettingsますDataBindings。これらをプルダウンするとText、ラベルのプロパティにバインドするオプションが両方にあることがわかります。これらを使用すると、「定数文字列」をアプリの設定ファイルに配置してApplicationSettingsプロパティを介してバインドするか、任意のデータソースに配置してDataBindingsプロパティを介してバインドできます。次に、フォーム デザイナーが適切なコードを生成します。

于 2009-05-18T12:59:04.527 に答える
4

何を達成しようとしているのかは完全にはわかりませんが、通常、すべての文字列がデザイナーの .cs ファイルにハードコードされるのを避けたい場合は、起動時に文字列が読み込まれるリソース ファイルを使用します。

フォームの「ローカライズ可能」プロパティを「true」に設定すると、すべてが自動的にリソースになると思います。一方、私は Windows フォームの専門家とはほど遠いので、これが機能するようになるまで、これらすべてを塩のピンチで処理してください :)

于 2009-05-18T12:44:29.267 に答える
3

2番目の方法が最善の策です。デザイナーがあなたの変更を常に保持するとは限りません。Page_Initイベント メソッドでコントロールの変更を行いたいと思うでしょう。これにより、変更がデザイナーに表示される場合があります。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.init.aspx

このようにして、制御する実際のコード ビハインド クラスに定数を保持することができ、制御は希望どおりに開始され、変更したいものだけを制御することができます。

更新:申し訳ありませんが、これが WinForms であることに気付きませんでした。コントロールの初期化が呼び出された直後にコントロールをコンストラクターに登録するだけなので、WinForms では実際にはさらに簡単です。

于 2009-05-18T12:46:39.857 に答える
1

どのような問題を解決しようとしていますか? ローカリゼーションを実装しようとしている場合は、.NET および sattelite アセンブリに付属するローカリゼーション機能を調べてください。

カスタマイズの問題を解決しようとしている場合は、設定エディターを使用して、.NET で利用可能なカスタマイズ オプションを確認してください。

定数文字列を使用する必要があるのはなぜですか?

于 2009-05-18T12:46:19.700 に答える