【问题标题】:How to add resources in separate folders?如何在单独的文件夹中添加资源?
【发布时间】:2009-05-13 18:46:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# visual-studio visual-studio-express


    【解决方案1】:

    您不需要在 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);
    }
    

    【讨论】:

    • 如何在文件夹上发送构建操作?我已将其设置为我为图像创建的资源。如果我手动将它们添加到文件夹中,我无法将项目添加到我创建的资源中,我必须通过资源设计器添加它们。如果我这样做了,它们不是t 在单独的文件夹中。
    • 我没有创建任何资源文件/项目/解决方案。我所做的只是一个包含图像作为嵌入式资源的文件夹。谢谢!我用它来查看资源“string[] str = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();” \n\n\n 设置图片 "pnlInventory.BackgroundImage = Image.FromStream(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Celebrity.Resources.all_potion_01.jpg"));"。
    • 在设计时如何使用资源,例如设置一个按钮指向其中一张图片?单击本地资源然后将其指向该文件是好还是不好?
    【解决方案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");
    

    希望对你有帮助

    【讨论】:

    • 想象一下我有两张同名的图片,例如“A.jpg”。我想在两个文件夹中实现它们,这样它们就不会被替换,例如文件夹 C 和文件夹 D。这就是问题所在.
    • 自定义资源管理器的数量没有限制。由于您将其放在单独的文件夹/ resx 文件中(您可以创建 resx01、resx02 等)您将跟踪资源管理器 HTH 的逻辑分离
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多