Как добавить ресурсы в отдельные папки? - PullRequest
9 голосов
/ 13 мая 2009

Когда я пытаюсь добавить ресурс в конструкторе ресурсов, нажав «Добавить существующий элемент», элемент помещается в папку «Ресурс».

Проблема в том, что если я создаю новый каталог в каталоге ресурсов и помещаю туда ресурсы, я получаю ошибку компилятора, что файлы не могут быть найдены.

Я не могу поместить все ресурсы в одну папку, потому что мне нужно добавить 2500 изображений, и некоторые из них соответствуют их именам.

Ответы [ 2 ]

9 голосов
/ 13 мая 2009

Вам не нужно добавлять изображения в папку ресурсов. Вы можете добавить изображения в любую нужную папку, а затем установить действие по сборке изображений на «Встроенный ресурс». Таким образом, они будут собраны в сборку как ресурсы. Я не знаю, возникают ли проблемы с производительностью при большом количестве изображений ...

Обновление: подробнее:

  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);
}
2 голосов
/ 13 мая 2009

Создайте новый файл ресурсов (в следующем примере я назвал его Images01 в папке resx) Создайте собственный класс менеджера ресурсов и инициализируйте его, чтобы он указывал на только что созданный файл

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");

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...