.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での文字列リソースの入力
プロジェクト・プロパティから文字列リソースを入力しているところ。プロジェクト・プロパティは、ソリューション・エクスプローラでプロジェクト項目を右クリックして、表示されるコンテキスト・メニューから[プロパティ]を選択すると表示される。
  プロジェクト・プロパティで[リソース]タブを開く。
  それぞれの文字列リソースに対して名前を付ける(この例では「StringResource」)。プログラム中で文字列リソースを使う際には、ここで指定した名前でアクセスすることになる。
  文字列リソースの実際の文字列値。ここでは「Hello String Resource!」と入力した。
  後から見て分かりやすいように、「文字列リソースが何を示すのか」といったコメントを残せる。

 ここで設定した内容は、(基本的に)プロジェクト配下のプロジェクト・プロパティ用のフォルダ(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では非常に簡単にリソースにアクセスする手段が追加されている。

 それが、次のコードによってアクセスする手法だ。

string 文字列リソース =
  global::WindowsApplication1.Properties.Resources.StringResource;
Dim 文字列リソース As String = My.Resources.StringResource
組み込まれた文字列リソースにアクセスするコード(上:C#、下:VB)
入力する際にはIntelliSenseも効く。

 このように.NET Framework 2.0では、

  • C#:「<ルート名>.<キー名>」
  • VB:「My.Resources.<キー名>」

でリソースにアクセスできる。

 C#の例では「global::」というグローバル名前空間修飾子を指定しているが、この指定は必ずしも付けなければならないというわけではない。しかし、付けた方が「リソースを使用するクラス」と「既定の名前空間」で名前が同じになった場合に問題が起こらないので安全だ。

 VBの例ではMy機能を活用している。My機能を活用しない場合は、次のようなコードになる。

Dim 文字列リソース As String = _
  Global.WindowsApplication1.My.Resources.StringResource
My機能を活用せずに組み込まれた文字列リソースにアクセスするコード(VB)

 つまり次のような形式でアクセスできる。

  • VB:「<ルート名前空間>.My.Resources.<キー名>」

 「Global.」はグローバル名前空間修飾子である。前述のC#と同じ理由で、付けなくても動作するが、付けた方が安全だ。

 なお本稿で紹介した方法でアクセスできるリソースは、(基本的に)上記のプロジェクト・プロパティの[リソース]タブで設定したものだけである。それ以外のリソース(例えばそれぞれのフォームに付属する.resxファイル(例えば「Form1.resx」)のリソースや別プロジェクトで生成した別アセンブリのリソースなど)にはアクセスできない。これらにアクセスするには、従来どおりの「埋め込みリソース」を扱う方法でアクセスする必要がある(詳しくは「TIPS:VS.NETで画像などのリソースを利用するには?(読込編)」を参照されたい)。

 ただし、プロジェクト内で独自に.resxファイルを追加した場合には、そのファイルも対してもほぼ同様の手法でアクセス可能になる。これについては「TIPS:独自の.resxファイルの文字列リソースを活用するには?」で紹介する。

 .NET Framework 2.0のリソース管理機能は何も文字列だけにとどまらない。「イメージ(画像)」「アイコン」「オーディオ」「ファイル」などにも対応している。これらのリソースの操作方法については後日あらためて紹介したい。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:リソース
カテゴリ:クラス・ライブラリ 処理対象:リソース
関連TIPS:VS.NETで画像などのリソースを利用するには?(準備編)
関連TIPSVS.NETで画像などのリソースを利用するには?(組込編)
関連TIPS:VS.NETで画像などのリソースを利用するには?(読込編)
関連TIPS:独自の.resxファイルの文字列リソースを活用するには?

この記事と関連性の高い別の.NET TIPS
独自の.resxファイルの文字列リソースを活用するには?
VS.NETで画像などのリソースを利用するには?(準備編)
VS.NETで画像などのリソースを利用するには?(読込編)
[ASP.NET AJAX]ローカリゼーション対応を行うには?(アセンブリ組み込み編)
文字列のリソースに改行コードを埋め込むには?
VS.NETで画像などのリソースを利用するには?(組込編)
Xamarin.Forms:アプリのリソースを指定して画像を表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間