リソース
リソース
作例:画像の埋め込み
2.6 節 と同じプログラムを作ります。
ただし,今回は画像ファイルをリソースとして実行ファイルに埋め込んでみます。
コード
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
class Form1 : Form
{
Bitmap backgroundImage;
public Form1()
{
// プロジェクト名 Project1,リソース名 Image1 の場合
backgroundImage = Project1.Properties.Resources.Image1;
this.BackgroundImage = backgroundImage;
this.BackgroundImageLayout = ImageLayout.Tile;
}
}
tile.png としてこのイメージファイルを使用しました。ご自由にダウンロードして使ってください。
解説
アプリケーションが使用する画像などのデータをリソース (resource) と呼びます。
ここでは特に,実行ファイルに埋め込まれるデータのことをリソースと呼んでいます。
(リソースという言葉は他にもいろいろな意味で使われます。)
右図のように「Resources.resx」が存在しますか?
このファイルがない場合は,補足 1 の手順をまず踏んでください。
この「Resources.resx」は,リソースファイルといいます。
リソースファイルを編集することで,画像ファイルをリソースとして埋め込んだり,アイコンを埋め込んだりすることができます。
「Resources.resx」をダブルクリックすると,リソースファイルの編集画面に移ります。
リソースを扱うプログラムでは,プロジェクトの名前空間名とリソース名が重要になります。
右図の例では,プロジェクト名「Project1」がデフォルトの名前空間名となります。
リソースにアクセスするには,次のような表式を使います。
名前空間名.Properties.Resources.リソース名
今回のサンプルプログラムでは,プロジェクト名が「Project1」,リソース名が「Image1」であるので,Project1.Properties.Resources.Image1 と書いてリソースにアクセスしています。
ビルドして出来た実行ファイルは,画像がリソースとして埋め込まれている分,サイズが大きくなっているはずです。
ファイルをリソースとして埋め込む場合と埋め込まない場合とでファイルサイズを比べてみてください。
補足:Resource.resx が存在しない場合
Resource.resx を生成するには,次のように操作します。
[プロジェクト] - [(プロジェクト名) のプロパティ] を開きます。 | |
[リソース] のタブを開きます。 「このプロジェクトには既定のリソースファイルが含まれていません。ファイルを作成するには,ここをクリックしてください。」という表示がある場合には,そのリンクをクリックします。 |
|
左図のような表示になっていれば,この時点で Resource.resx は生成されています。 |
※ 開発環境として Visual Studio C# 2010 Express を想定して書いていますが,違うエディションやバージョンでもだいたい同じような操作をすれば大丈夫です。
アイコン
作例:アイコンの設定
タイトルバーのアイコンを設定します。
さらに,実行ファイルのアイコンを設定します。
この図のプログラムに使用しているアイコンは こちら です。
コード
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
class Form1 : Form
{
public Form1()
{
// プロジェクト名 Project1,リソース名 Icon1 の場合
Icon icon = Project1.Properties.Resources.Icon1;
this.Icon = icon; // フォームのアイコンを設定
}
アイコンは,当サイトのファビコンでよければ こちら (favicon.ico) をダウンロードして使ってください。
解説
この作例では,リソースとして取り込んだアイコンファイルを Project1.Properties.Resources.Icon1 で参照しています。
ファイルをリソースとして取り込む方法については 7.1 節 を参照してください。
アイコンファイルを取り扱うためのクラスに Icon クラスがあります。
System.Drawing 名前空間
Icon クラス
[MSDN]
アイコンを表現します。
フォームにアイコンを設定するには,Icon プロパティにアイコンを登録します。
実行ファイルのアイコンを設定するには,次のように操作します。
※ 開発環境として Visual Studio C# 2010 Express を想定して書いていますが,違うエディションやバージョンでもだいたい同じような操作をすれば大丈夫です。
[プロジェクト] - [(プロジェクト名) のプロパティ] を開きます。 | |
[アプリケーション] タブを開きます。 [アイコンとマニフェスト] 欄の中の [アイコン] 欄の右にある [...] ボタンを押して,設定したいアイコンファイルを開いてください。 |
|
左図のように,指定したアイコンのプレビューが右端に表示されれば設定完了です。 |
これだけ! 簡単!
## アイコン (実行ファイル) {#item-85} ### 作例:実行ファイルのアイコンの設定実行ファイルのアイコンを設定します。
この図のプログラムに使用しているアイコンは こちら です。
### 手順実行ファイルのアイコンを設定するには,次のように操作します。
※ 開発環境として Visual Studio C# 2010 Express を想定して書いていますが,違うエディションやバージョンでもだいたい同じような操作をすれば大丈夫です。
[プロジェクト] - [(プロジェクト名) のプロパティ] を開きます。 | |
[アプリケーション] タブを開きます。 [アイコンとマニフェスト] 欄の中の [アイコン] 欄の右にある [...] ボタンを押して,設定したいアイコンファイルを開いてください。 |
|
左図のように,指定したアイコンのプレビューが右端に表示されれば設定完了です。 |
これだけ! 簡単!
タイトルバーに表示されるアイコンを変更する方法については 7.2 節 を参照してください。
サウンド
作例:Wave サウンドプレーヤ
作例は Wave ファイルを再生できる簡素なサウンドプレーヤです。
コード
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
class Form1 : Form
{
Button buttonPlay; // '再生' ボタン
Button buttonStop; // '停止' ボタン
SoundPlayer soundPlayer; // サウンドプレーヤ
public Form1()
{
soundPlayer = new System.Media.SoundPlayer();
soundPlayer.SoundLocation = @"C:\test\sound.wav";
soundPlayer.Load(); // サウンドファイルをロード
buttonPlay = new Button()
{
Location = new Point(20, 20),
Text = "再生",
};
buttonPlay.Click += new EventHandler(buttonPlay_Click);
buttonStop = new Button()
{
Location = new Point(100, 20),
Text = "停止",
};
buttonStop.Click += new EventHandler(buttonStop_Click);
this.Controls.AddRange(new Control[]
{
buttonPlay, buttonStop
});
}
void buttonPlay_Click(object sender, EventArgs e)
{
soundPlayer.Play(); // 再生
}
void buttonStop_Click(object sender, EventArgs e)
{
soundPlayer.Stop(); // 停止
}
}
解説
Wave サウンドファイルを再生するだけでいいなら,SoundPlayer が利用できます。
使い方は非常に簡単です。
System.Media 名前空間
SoundPlayer クラス
[MSDN]
Wave サウンドプレーヤを表現します。
プロパティ
項目 | 説明 |
---|---|
string SoundLocation | ファイルへのパス |
SoundPlayer コンストラクタ
void SoundPlayer()
void SoundPlayer( string soundLocation // Wave ファイルへのパス )
Load メソッド
サウンドを読み込みます。
void Load()
Play メソッド
サウンドを再生します。
void Play()
PlayLooping メソッド
サウンドを繰り返し再生します。
void PlayLooping()
PlaySync メソッド
サウンドを再生します。ただし,再生中は待機状態となります。
void PlaySync()
Stop メソッド
サウンドの再生を中断します。
void Stop()
おまけ:システムサウンド
ついでにシステムサウンドを鳴らす簡単なプログラムも紹介しておきます (コンソールプログラム)。
class Program
{
static void Main()
{
System.Media.SystemSounds.Asterisk.Play();
}
}
System.Media 名前空間
SystemSounds クラス
[MSDN]
システムサウンドを提供します。
プロパティ
項目 | 説明 |
---|---|
(static) SystemSound Asterisk | 情報 |
(static) SystemSound Beep | 一般の警告音 |
(static) SystemSound Exclamation | 警告 |
(static) SystemSound Hand | エラー |
(static) SystemSound Question | 問合せ |
サウンド
作例:サウンドの埋め込み
7.4 節 と同じですが,リソースとして取り込んだサウンドを扱っています。
コード
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
class Form1 : Form
{
Button buttonPlay; // '再生' ボタン
Button buttonStop; // '停止' ボタン
SoundPlayer soundPlayer; // サウンドプレーヤ
public Form1()
{
buttonPlay = new Button()
{
Location = new Point(20, 20),
Text = "再生",
};
buttonPlay.Click += new EventHandler(buttonPlay_Click);
buttonStop = new Button()
{
Location = new Point(100, 20),
Text = "停止",
};
buttonStop.Click += new EventHandler(buttonStop_Click);
// プロジェクト名 Project1,リソース名 Audio1 の場合
System.IO.Stream stream = Project1.Properties.Resources.Audio1;
soundPlayer = new System.Media.SoundPlayer();
soundPlayer.Stream = stream;
soundPlayer.Load();
this.Controls.AddRange(new Control[]
{
buttonPlay, buttonStop
});
}
void buttonPlay_Click(object sender, EventArgs e)
{
soundPlayer.Play();
}
void buttonStop_Click(object sender, EventArgs e)
{
soundPlayer.Stop();
}
}
解説
ファイルをリソースとして取り込む方法については 7.1 節 を参照してください。
SoundPlayer については 6.12 節 でも紹介しています。
System.Media 名前空間
SoundPlayer クラス
[MSDN]
Wave サウンドプレーヤを表現します。
プロパティ
項目 | 説明 |
---|---|
Stream stream | ファイルへのストリーム |
SoundPlayer コンストラクタ
void SoundPlayer()
void SoundPlayer( Stream stream // ストリーム )
Load メソッド
サウンドを読み込みます。
void Load()
Play メソッド
サウンドを再生します。
void Play()
PlayLooping メソッド
サウンドを繰り返し再生します。
void PlayLooping()
PlaySync メソッド
サウンドを再生します。ただし,再生中は待機状態となります。
void PlaySync()
Stop メソッド
サウンドの再生を中断します。
void Stop()
テキスト
作例:テキストリソース
リソースとして埋め込んだリソースを使ってメッセージを表示しています。
コード
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
// プロジェクト名 Projec1,リソース名 String1,String2 の場合
string str1 = Project1.Properties.Resources.String1;
string str2 = Project1.Properties.Resources.String2;
MessageBox.Show(str1, str2);
}
}
解説
リソースには,イメージやオーディオだけでなく,テキストも含めることができます。
右図のリソースファイル「Resources.resx」をダブルクリックすれば,下図のような編集画面が開きます。
[文字列] の編集モードを選択して,図のようにテキストを編集してください。
String1,String2 が,Project1.Properties.Resources.String1 のようにしてプログラムから参照できる名前になります。
プログラム実行時に,対応する値に置き換えられます。
コメントはプログラムに影響しないので自由に付けてください。
テキストをリソース化する利点は,ローカライズが容易になるというところにあります。
多言語対応のプログラムの作り方については 10.2 節 で説明しています。
補足:Resource.resx が存在しない場合
Resource.resx を生成するには,次のように操作します。
[プロジェクト] - [(プロジェクト名) のプロパティ] を開きます。 | |
[リソース] のタブを開きます。 「このプロジェクトには既定のリソースファイルが含まれていません。ファイルを作成するには,ここをクリックしてください。」という表示がある場合には,そのリンクをクリックします。 |
|
左図のような表示になっていれば,この時点で Resource.resx は生成されています。 |
※ 開発環境として Visual Studio C# 2010 Express を想定して書いていますが,違うエディションやバージョンでもだいたい同じような操作をすれば大丈夫です。