الحصول على قيمة الخاصية في عنصر تحكم المستخدم الرئيسي من عنصر تحكم مستخدم الطفل [.net]


Answers

فمن الممكن للوصول إلى الوالد من التحكم الطفل عن طريق ((بارنتتيب) me.Parent). هذا غير مستحسن. لا توجد طريقة لمعرفة أن السيطرة لن تستخدم على صفحة أخرى / التحكم. لن يقوم معدي التحويل بالقبض على هذا، فإن هذا الإرسال سوف يسبب استثناء في وقت التشغيل.

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

Question

لدي تشيلدوسركونترول التي يتم تحميلها داخل بارينتوسركونترول. تحميل الصفحة المضيف بارينتوسركونترول.

وأود أن الوصول إلى خصائص في بارينتوسركونترول من تشيلدوسركونترول.

شكرا على وقتك




هل يمكن استخدام انعكاس مثل هذا:

public static T GetData<T>(this Control c, string propertyName, T defaultValue){
  Type t = obj.GetType();
  var prop = t.GetProperties().FirstOrDefault(p => p.Name == propertyName);
  if(prop == null) return defaultValue;
  else {
    object val = prop.GetValue(obj, null);
    if(val == null) return defaultValue;
    else return (T)val;
  }
}

هذا الأسلوب تمديد بسيط الذي يمتد "السيطرة" ولكن يمكنك بسهولة وضع هذا على أي شيء (لقد استخدمت على object عندما كنت تمرير الطبقات المجهولة حولها، والتي هي في حد ذاتها فكرة سيئة!)

ومن ثم يكون الاستخدام:

string someData = this.Parent.GetData("someProperty", string.Empty);



شكرا على الردود.

وسوف تنظر في التفكير. ومع ذلك، لقد سمعت أن لديها عنق الزجاجة الأداء.

جيم - أنت تقول:

~~

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

~~

في وضعي، يقوم كل من الوالد والطفل بتنفيذ نفس الواجهة. هل هذا التصميم السيئ؟ إذا أضفت خاصية مرجع الأصل في الواجهة، فهل ستعمل على اعتبار أن الوالد ينفذ نفس الواجهة أيضا؟