2017-12-01 12 views
0

に割り当てる:犬、猫、馬:私のリソースでは、私がこのリスト持っている名前で画像リソースへのアクセスとのPictureBox

List<string> list = new List<string>(); 
list.Add("dog.jpg"); 
list.Add("cat.jpg"); 
list.Add("horse.jpg"); 

を、私は名前の3つのイメージを持っています。リストを使ってピクチャボックスに表示したい。

私はこのような何かを試してみました:私は、リスト内の名前を使用して画像を取得できますか

'Resources' does not contain a definition for 'list' `

pictureBox1.Image = project.Properties.Resources.list[2]; // should display the horse image 

問題は、それがエラーを表示することですか?

+0

リソースにImageをどのように定義しましたか?あなたはスクリーンショットをつけることができますか?またはxml? – Sunil

+2

あなたはリソースを参照する方法を誤解しているようです。暗黙のうちに、 'list [2]'が文字列の値に置き換えられ、それが既存のリソースを参照しているかのように解析されます。これは単純にC#では機能しません(リフレクションは使用しないでください!)。 – Flater

+0

プロジェクトのフォルダに画像を置いて、そのようにすべての画像をロードするほうがよいでしょう。次に、上記のようにインデクサーを使用して設定できるイメージの配列を取得します。 – Shelby115

答えて

0

Properties.Resourcesこのようなリソース(犬、猫、そして馬)だけを知っているので、彼に文字列を与えることはできず、リソースを知っていることを期待しています。 あなたはこのようのResourceManagerからGetObjectメソッドを使用する必要があります。

(Bitmap)Properties.Resources.ResourceManager.GetObject(list[2]) 

これはあなたの馬のイメージを与える必要があります。

-1

pictureBox1.Refresh();を呼び出してみます。イメージを割り当てた後

+0

それでも動作しません。その問題は、「馬」の内部を見るのではなく、「list [2]」という名前の画像を探しているということです。 –

+0

@ VladAndrei:問題の核心は正しいですか。しかし、あなたが今しようとしていることは、C#では不可能です。変数変数名の概念(例えば、PHPでは '$ varname =" foo "'、 '$$ varname'は' $ foo'変数を参照します)はC#では存在しません。 – Flater

0

イメージ、文字列などをリソースファイル(.resx)に追加すると、Visual Studioは対応するResourcesクラスの強い型指定のプロパティを自動的に生成します。たとえば、プロジェクトにhorse.jpgResources.resxに追加した場合は、System.Drawing.Bitmapを返すProperties.Resourcesクラスにhorseプロパティが存在するはずです。だから、行うことができる必要があります:

pictureBox1.Image = Properties.Resources.horse; 

名前で画像リソースにアクセスできるようにしたい場合は、あなたがResourceManager.GetObjectを使用して、それを生成されたコードは、それをしないのと同じ方法を行うことができます。しかし、イメージリソース名は.jpg拡張子は含まれません、あなたはBitmapに結果をキャストする必要があります注意してください。

pictureBox1.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject("horse"); 

あなたは、ファイル名をオフ拡張子を削除し、リソースを取得するヘルパーメソッドを作成することができ、あなたはこのようなあなたのリストでそれを使用することができるようになる

private Bitmap GetImageResource(string filename) 
{ 
    string resourceName = filename.Substring(0, filename.IndexOf(".")); 
    return (Bitmap)Properties.Resources.ResourceManager.GetObject(resourceName); 
} 

pictureBox1.Image = GetImageResource(list[2]); 
関連する問題