我有这个清单:
List<string> list = new List<string>();
list.Add("dog.jpg");
list.Add("cat.jpg");
list.Add("horse.jpg");
在我的资源中,我有3张图片名为:dog,cat和horse。我想使用列表在图片框中显示它们。
我尝试过这样的事情:
pictureBox1.Image = project.Properties.Resources.list[2]; // should display the horse image
问题是它显示错误:
'资源'不包含'list'的定义`
如何使用列表中的名称获取图像?
答案 0 :(得分:0)
将图像,字符串等添加到资源文件(.resx)时,Visual Studio会自动为相应的Resources
类生成强类型属性。例如,如果您在项目中将horse.jpg
添加到Resources.resx
,则horse
类上应该有一个Properties.Resources
属性,返回System.Drawing.Bitmap
。所以你应该能够做到:
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]);
答案 1 :(得分:0)
Properties.Resources只知道资源(狗,猫和马),所以你不能给他一个字符串并期望他知道资源。 您需要使用ResourceManager中的GetObject方法,如下所示:
(Bitmap)Properties.Resources.ResourceManager.GetObject(list[2])
这应该会给你马的形象。
答案 2 :(得分:-1)
尝试调用pictureBox1.Refresh();分配图像后。