リソース

リソースの種類

リソース 対象データ 格納時の型
文字列 文字列 String
イメージ .bmp、.jpgなどのイメージファイル Bitmap
アイコン .icoファイル Icon
オーディオ .wav、.mp3などのサウンドファイル byte[]
ファイル 上記以外のファイル ファイルのFileTypeによって異なる
  • Text … String
  • Binary … byte[]
(格納後、リソースのプロパティから変更できる)
その他 文字列シリアル化をサポートするその他のデータ  
[リソース] ページ (プロジェクト デザイナー) | MSDN

リソースの追加方法

C#では、Visual Studioでプロジェクトのプロパティを開き、それの[リソース]タブから各種のリソースを追加できます。方法 : リソースを追加または削除する | MSDN

プロジェクトに追加したリソースは、プロジェクトのResourcesディレクトリに置かれます。そのとき既存のファイルを追加したならば、それがコピーされて置かれます。

既存のリソースを追加した場合、プロジェクトに格納されるのはそれのコピーです。よってリソースを編集するときは、プロジェクト内のResourcesディレクトリにあるファイルを編集します。

リソースファイルへの格納方法

格納方法 リソースファイルに格納される情報
リンクリソース
(Linked Resources)
ファイルへのリンク [既定]

(コンパイル時にリンク先からデータが取得され、アプリケーションのマニフェストに格納される)

埋め込みリソース
(Embedded Resources)
ファイルの内容をバイナリデータとして表したテキスト
リンク リソースと埋め込みリソース | MSDN

リソースファイル (.resx) への格納方法は、リソースの[Persistence]プロパティから変更できます。それにはプロジェクトのプロパティの[リソース]タブで対象のリソースを選択し、メニューの【表示 → プロパティ ウィンドウ】からプロパティを表示します。

テキストファイル

テキストと認識されないテキストファイルは、byte配列で格納されます。これはリソースのプロパティ ウィンドウで、[FileType]をTextとすることで解消できます。

またテキストのエンコーディングが設定と一致していないと文字化けするため、プロパティの[Encoding]を確認します。このエンコーディングの指定はProperties\Resources.Designer.csでのリソースの定義の<summary>に反映され、Properties\Resources.resxでのリソースへのリンクの末尾に;shift_jis</value>のように設定されます。

リソースの取得方法

Visual Studioでリソースを追加すると、プロジェクトの名前空間にResourcesクラスが自動で生成されます。

/// <summary>
///   ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。
/// </summary>
[global::System.CodeDom.Compiler.GenedratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

    /// <summary>
    ///   ABC に類似しているローカライズされた文字列を検索します。
    /// </summary>
    internal static string String1 {
        get {
            return ResourceManager.GetString("String1", resourceCulture);
        }
    }

そしてそのリソースは、そのクラスのプロパティを介して取得できます。

string string1   = Namespace.Properties.Resources.String1;   // 文字列
Bitmap bitmap1   = Namespace.Properties.Resources.Image1;    // イメージ
string textFile1 = Namespace.Properties.Resources.TextFile1; // ファイル

イメージ

システムアイコン

参考

参考書

MSDN (Microsoft Developer Network) から検索