.NET TIPS 文字列リソースを活用するには?[2.0のみ、C#、VB]デジタルアドバンテージ 一色 政彦2007/02/15 |
|
|
Windowsアプリケーション内で扱う文字列をハード・コーディングせずに、外部データ(=リソース)に分離して保存したい場合がある。例えば、表示するメッセージを一括管理したい場合や、多言語対応する場合などである。このような場合、(.NET Frameworkが標準で提供する)リソースとしてこれらの文字列リソースを格納する方法が一般的である。
.NET Framework 2.0ではこのリソースの取り扱いが、以前(例「TIPS:VS.NETで画像などのリソースを利用するには?(準備編)」)と比べて格段に容易になっている。
そこで本稿では、.NET Framework 2.0での文字列リソースの取り扱い方法について紹介する。C#とVisual Basic(以降、VB)で取り扱い方法が違う部分は、その違いについても言及する。
文字列リソースの設定方法
文字列リソースを設定するための最も基本的な方法は、Visual Studio 2005(以降、VS 2005)のIDEを使うものだ。
これにはまず、任意のプロジェクトのプロジェクト・プロパティで[リソース]タブを開き、そこに文字列リソースを入力していけばよい。入力の具体的な手順は次の画面を参考にしてほしい。
VS 2005での文字列リソースの入力 | ||||||||||||
プロジェクト・プロパティから文字列リソースを入力しているところ。プロジェクト・プロパティは、ソリューション・エクスプローラでプロジェクト項目を右クリックして、表示されるコンテキスト・メニューから[プロパティ]を選択すると表示される。 | ||||||||||||
|
ここで設定した内容は、(基本的に)プロジェクト配下のプロジェクト・プロパティ用のフォルダ(C#では「Properties」、VBでは「My Project」)内に生成される「Resources.resx」ファイルに格納される(※.resxファイルについては「TIPS:VS.NETで画像などのリソースを利用するには?(準備編)」を参照してほしい)。そしてこの状態でプロジェクトをビルドすると、アセンブリ(=.EXEファイルや.DLLファイル)にその文字列リソースが自動的に組み込まれる。
組み込まれたリソースの名前については注意が必要だ。以下で少し詳しく説明しておこう。
組み込まれた文字列リソースのリソース名
実は.NETのリソース名は次の2種類で構成されている。
- ルート名(.resourcesファイルのファイル名。実際のコーディングで使用するときには拡張子「.resources」は省略する)
- キー名(リソース名。VS 2005で入力した名前)
この詳細は「TIPS:VS.NETで画像などのリソースを利用するには?(読込編)」を参照してほしいが、C#とVBでは、このうちのルート名に違いが生じるので注意しなければならない。
次の画面は組み込まれたリソースの名前を、ルート名とキー名に分けて表示したものだ。ちなみにキー名は、C#でもVBでも先ほど入力した「StringResource」となる。
【C#の場合】 |
【VBの場合】 |
組み込まれた文字列リソースの内容(上:C#、下:VB) |
アセンブリに組み込まれたリソース内容を調べる方法は、「TIPS:VS.NETで画像などのリソースを利用するには?(読込編)」(のサンプル・プログラムなど)を参考にしてほしい。 |
このように、ルート名はC#とVBでは次のような命名規則となっている(※ファイル名とは前述の「Resources.resx」を指す)。
- C#:「<既定の名前空間>.<フォルダ名>.<ファイル名>」
→例:WindowsApplication1.Properties.Resources - VB:「<ルート名前空間>.<ファイル名>」
→例:WindowsApplication1.Resources
なお上記画面で、最後に「.resources」と付いているのは、.resourcesファイルの拡張子なので、ルート名としては省略して扱う必要がある。
組み込まれた文字列リソースの活用方法
それでは、実際に設定した文字列リソースを使う方法を示そう。.NET Framework 2.0では非常に簡単にリソースにアクセスする手段が追加されている。
それが、次のコードによってアクセスする手法だ。
|
||
組み込まれた文字列リソースにアクセスするコード(上:C#、下:VB) | ||
入力する際にはIntelliSenseも効く。 |
このように.NET Framework 2.0では、
- C#:「<ルート名>.<キー名>」
- VB:「My.Resources.<キー名>」
でリソースにアクセスできる。
C#の例では「global::」というグローバル名前空間修飾子を指定しているが、この指定は必ずしも付けなければならないというわけではない。しかし、付けた方が「リソースを使用するクラス」と「既定の名前空間」で名前が同じになった場合に問題が起こらないので安全だ。
VBの例ではMy機能を活用している。My機能を活用しない場合は、次のようなコードになる。
|
|
My機能を活用せずに組み込まれた文字列リソースにアクセスするコード(VB) |
つまり次のような形式でアクセスできる。
- VB:「<ルート名前空間>.My.Resources.<キー名>」
「Global.」はグローバル名前空間修飾子である。前述のC#と同じ理由で、付けなくても動作するが、付けた方が安全だ。
なお本稿で紹介した方法でアクセスできるリソースは、(基本的に)上記のプロジェクト・プロパティの[リソース]タブで設定したものだけである。それ以外のリソース(例えばそれぞれのフォームに付属する.resxファイル(例えば「Form1.resx」)のリソースや別プロジェクトで生成した別アセンブリのリソースなど)にはアクセスできない。これらにアクセスするには、従来どおりの「埋め込みリソース」を扱う方法でアクセスする必要がある(詳しくは「TIPS:VS.NETで画像などのリソースを利用するには?(読込編)」を参照されたい)。
ただし、プロジェクト内で独自に.resxファイルを追加した場合には、そのファイルも対してもほぼ同様の手法でアクセス可能になる。これについては「TIPS:独自の.resxファイルの文字列リソースを活用するには?」で紹介する。
■
.NET Framework 2.0のリソース管理機能は何も文字列だけにとどまらない。「イメージ(画像)」「アイコン」「オーディオ」「ファイル」などにも対応している。これらのリソースの操作方法については後日あらためて紹介したい。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:リソース カテゴリ:クラス・ライブラリ 処理対象:リソース 関連TIPS:VS.NETで画像などのリソースを利用するには?(準備編) 関連TIPS:VS.NETで画像などのリソースを利用するには?(組込編) 関連TIPS:VS.NETで画像などのリソースを利用するには?(読込編) 関連TIPS:独自の.resxファイルの文字列リソースを活用するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|