سؤال

أقوم بفك ترجمة ملف dll إلى C#.يحتوي أحد المشاريع التي تم إنشاؤها بواسطة أداة فك التحويل البرمجي على أكثر من 1000 سطر عربات التي تجرها الدواب والتي كما هو موضح أدناه:

this.pictureBox1.BeginInit();

خطأ 385 'System.windows.forms.picturebox' لا يحتوي على تعريف لـ "begininit" ولا يوجد طريقة تمديد "تبدأ" قبول الوسيطة الأولى من النوع ". باستخدام التوجيه أو مرجع التجميع؟)

لا توجد طريقة BeginInit() لـ Picturebox العادي.لقد علقت ببساطة على السطور:

//this.pictureBox1.BeginInit();

ثم قمت بفحص مخرجات برنامج فك التحويل البرمجي آخر، يبدو كما هو موضح أدناه ولم يكن لدى برنامج التحويل البرمجي VS أي خطأ سابق:

((ISupportInitialize)this.pictureBox1).BeginInit();

بسبب العطل، لم أتمكن من تصدير جميع المصادر مرة واحدة باستخدام برنامج فك التحويل البرمجي الثاني.الآن لست متأكدًا مما يجب علي فعله.لم أتمكن من تشغيل المشروع وتصحيحه بسبب وجود أخطاء أخرى يجب مسحها أولاً.خياراتي هي:

  1. مجرد التعليق خارج السطور.
  2. تعديل وإدراج علامة (ISupportInitialize).
  3. قم بإنشاء طريقة تمديد إن أمكن.

الخيار الأخير يبدو أسهل بالنسبة لي.هل يمكنني إنشاء طريقة ملحق BeginInit()، هل ستعمل دون أي مشكلة؟وكيف يمكنني تنفيذ واستخدام ISupportInitialize؟

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

المحلول

جرب هذا:

public static class PictureBoxExtension {
   public static void BeginInit(this PictureBox pb){
     ((ISupportInitialize)pb).BeginInit();
   }
}

أو الأفضل من ذلك، يمكنك تجربة ذلك لجميع عناصر التحكم الداعمة ISupportInitialize.هذا مخفي عن الوصول العادي لأنه تم تنفيذه صراحة, ، حتى نتمكن من استخدام هذا الامتداد لكشفه (بدون إرسال):

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top