按名称访问图像资源并将其分配给PictureBox

时间:2017-12-01 11:38:54

标签: c# winforms resources picturebox

我有这个清单:

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'的定义`

如何使用列表中的名称获取图像?

3 个答案:

答案 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();分配图像后。