سؤال

عندما أحاول إضافة مورد إلى مصمم الموارد بالنقر فوق "إضافة عنصر موجود"، يتم وضع العنصر في مجلد "المورد".

المشكلة هي أنه إذا قمت بإنشاء دليل جديد في دليل الموارد ووضع الموارد هناك، فسيظهر لي خطأ في المترجم مفاده أنه لا يمكن العثور على الملفات.

لا أستطيع وضع جميع الموارد في مجلد واحد، لأنه يجب علي إضافة 2500 صورة وبعضها مطابق لأسمائها.

هل كانت مفيدة؟

المحلول

لا تحتاج إلى إضافة الصور ضمن مجلد الموارد.يمكنك إضافة الصور إلى أي مجلد ترغب فيه، ثم قم بتعيين إجراء الإنشاء للصور على "Embedded Resource".بهذه الطريقة سيتم تجميعها في التجميع كموارد.لا أعرف ما إذا كانت هناك مشكلات في الأداء تظهر عندما يتعلق الأمر بعدد كبير من الصور ...

تحديث:بمزيد من التفصيل:

  1. أضف المجلدات وملفات الصور كعناصر مشروع إلى المشروع (بحيث يمكنك رؤية كل مجلد والصور الموجودة بداخله في مستكشف الحلول)
  2. قم بتعيين خاصية Build Action لكل ملف من ملفات الصور على "Embedded Resource" (يمكنك القيام بذلك لملفات متعددة في نفس الوقت؛ما عليك سوى تحديد كافة ملفات الصور في مستكشف الحلول).

سيؤدي هذا إلى تجميع ملفات الصور في التجميع كموارد.سيتم تعيين اسم مورد لكل ملف باتباع هذا النمط: <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);
}

نصائح أخرى

وإنشاء ملف مورد جديد (في المثال التالي اتصلت عليه 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");

ونأمل أن يساعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top