9

当我尝试通过单击“添加现有项目”在资源设计器中添加资源时,该项目被放置在“资源”文件夹中。

问题是,如果我在 Resource 目录中创建一个新目录并将资源放在那里,我会收到一个编译器错误,即找不到文件。

我不能将所有资源放在一个文件夹中,因为我必须添加 2500 张图像,其中一些与它们的名称匹配。

4

2 回答 2

10

您不需要在 Resources 文件夹下添加图像。您可以将图像添加到您希望的任何文件夹,然后将图像的构建操作设置为“嵌入式资源”。这样,它们将作为资源编译到程序集中。我不知道当它是大量图像时是否会出现性能问题......

更新:更详细:

  1. 将文件夹和图像文件作为项目项添加到项目中(以便您可以在解决方案资源管理器中查看每个文件夹和其中的图像)
  2. 将每个图像文件的 Build Action 属性设置为“嵌入式资源”(您可以同时对多个文件执行此操作;只需在解决方案资源管理器中选择所有图像文件)。

这将导致图像文件作为资源编译到程序集中。每个文件都将按照以下模式分配一个资源名称:<root namespace for the assembly>.<folder name>.<image file name>. 您可以使用以下代码加载图像:

using(Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("<root namespace for the assembly>.<folder name>.<image file name>"))
{
    pictureBox1.Image = Image.FromStream(stream);
}
于 2009-05-13T18:51:44.777 回答
2

创建一个新的资源文件(在下面的示例中,我在 resx 文件夹中将其命名为 Images01) 创建一个自定义资源管理器类并将其初始化为指向刚刚创建的该文件

ResourceManager rm = new ResourceManager("ROOTNAMESPACE.resx.Images01", 
                                     System.Reflection.Assembly.GetExecutingAssembly());

实现GetImage的方法

    public static Image GetImage(string fileName)
    {
        Stream stream = GetResourceStream(fileName);

        Image image = null;
        if (stream != null)
        {
            image = Image.FromStream(stream);
        }

        return image;
    }

将图像添加到此 resx 文件

然后你可以在你的代码中使用它,如下所示

this.picProject.Image = Resources.GetImage("ImageName.png");

希望能帮助到你

于 2009-05-13T19:06:58.447 回答