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

Accessing an image resource by name and assigning it to a PictureBox

我有这个列表:

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

在我的资源中,我有 3 个图像,分别命名为:狗、猫和马。我想使用列表将它们显示在图片框中。

我试过这样的事情:

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

问题是它显示错误:

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

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

尝试调用 pictureBox1.Refresh();分配图像后。

当您将图像、字符串等添加到资源文件 (.resx) 时,Visual Studio 会自动在相应的 Resources class 中为您生成强类型属性。因此,例如,如果您在项目中将 horse.jpg 添加到 Resources.resx,则 Properties.Resources class 上应该有一个 horse 属性 returns一个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]);

Properties.Resources 只知道资源(狗、猫和马)所以你不能给他一个字符串并指望他知道资源。 您需要像这样使用 ResourceManager 中的 GetObject 方法:

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

这应该给你马图像。