« バージョン情報の設定 | トップページ | C#でカラーカーソル/アニメーションカーソルを使用する »

2011年1月13日 (木)

.NETでリソースにアクセスする

一応備忘録に書いておきます。

1.リソースとして埋め込む
ここでは、予めリソースにする内容を作成済み(ファイルとして保存されている)ものとします。

・C#2003でも可能な古典的(?)方法(手法1)
ソースファイルと同じフォルダに、埋め込みたいファイルを置いて、メインメニューから「プロジェクト」-「既存項目の追加」で、該当ファイルを選択します。次に、ソリューションエクスプローラで、追加したファイルを選択して表示されるプロパティのビルドアクションを「埋め込まれたリソース」に変更します。
これで完了です。

・C#2005以降で出来る方法(手法2)
プロジェクトのプロパティ画面のリソースタブで、埋め込みたいファイルを指定します。なお、カーソルは、リソースタイプとして用意されていませんが、指定すると自動的に「ファイル」に振り分けられますし、もちろんカーソルのリソースとして使えます(ちょっと工夫する必要があります)。

※ちなみにどちらの方法でも、アンマネージド実行ファイルのリソースとは違う形で埋め込まれます。従ってリソースハッカー等では、これらの埋め込まれたリソースを参照する事は出来ません。

2.埋め込んだイメージの取得と利用
ここでは、既定の名前空間名を ResAccess とし、ピクチャーボックス(pictureBox1)に、埋め込んだイメージ(resimage.bmp)を取得して、表示させる前提で書きます。

・手法1で埋め込んだ場合の取得と利用

Assembly asm = Assembly.GetExecutingAssembly();
pictureBox1.Image = new Bitmap(asm.GetManifestResourceStream(
    "ResAccess.resimage.bmp"));

以上でOKです。なお、Bitmap クラスは、GDI+のサポートしている形式のファイルならOKなので、ビットマップ(.bmp)ファイルの他、GIF、PNG、JPEG、TIFF等をリソースに使用しても問題ありません。

・手法2で埋め込んだ場合の取得と利用

pictureBox1.Image = ResAccess.Properties.Resources.resimage;

手法2だともっと簡単になります。なお、最後の "resimage" は、埋め込んだリソース名に相当します。デフォルトでは、拡張子を除いたファイル名と同じになりますが、変更も可能です。

3.埋め込んだカーソルの取得と利用
既定の名前空間名を ResAccess とし、ラベル(label1)では、埋め込んだカーソル(rescursor.cur)を取得して、表示させる前提で書きます。

・手法1で埋め込んだ場合の取得と利用

Assembly asm = Assembly.GetExecutingAssembly();
label1.Cursor = new Cursor(asm.GetManifestResourceStream(
    "ResAccess.rescursor.cur"));

これはイメージと同じ記述なので問題無いでしょう。

・手法2で埋め込んだ場合の取得と利用

using (MemoryStream ms = new MemoryStream(ResAccess.Properties.Resources.rescursor))
{
    label1.Cursor = new Cursor(ms);
}

ResAccess.Properties.Resources.rescursor の型はバイト配列となるので、そのままでは Cursor オブジェクトを生成出来ません。そこでここでは MemoryStream を介して、カーソルを生成しています。

4.WAVファイルの取得と利用
既定の名前空間名を ResAccess とし、SoundPlayerクラスにて埋め込んだ WAV(ressound.wav)の再生を行なう前提で書きます。なお C#2003 では、SoundPlayerクラスが使えないので、ここだけは手法1でもC#2005以降でないと動きません。

・手法1で埋め込んだ場合の取得と利用

Assembly asm = Assembly.GetExecutingAssembly();
using (System.Media.SoundPlayer sp = new System.Media.SoundPlayer(
    asm.GetManifestResourceStream("ResAccess.ressound.wav")))
{
    sp.Play();
}

・手法2で埋め込んだ場合の取得と利用

using (System.Media.SoundPlayer sp = new System.Media.SoundPlayer(
    ResAccess.Properties.Resources.ressound))
{
    sp.Play();
}

« バージョン情報の設定 | トップページ | C#でカラーカーソル/アニメーションカーソルを使用する »

覚え書き」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: .NETでリソースにアクセスする:

« バージョン情報の設定 | トップページ | C#でカラーカーソル/アニメーションカーソルを使用する »