من uitypeeditor ، استرجع سمة تم تطبيقها على الوالد الخاص بالممتلكات في .NET

StackOverflow https://stackoverflow.com/questions/2105584

سؤال

الأمر ليس بسيطًا تمامًا كما يقول العنوان ولكن آمل أن تفهم.

النظر في هذا السيناريو:

Class MyClass

    Property SubProp1
    End Property

    -TypeEditor(whatever)- 
    Property SubProp2
    End Property

End Class

Class MyButton
    Inherits Button

    -MyCustomAttribute-
    Property MC as MyClass
    End Property

End Class

بعد ذلك ، وضعت مثيلًا لـ MyButton في شبكة الممتلكات ، وتوسيع العقار MC وتحرير SubProp2.

من محرر النوع لـ SubProp2 ، أريد الحصول على السمة المطبقة على خاصية MC.

بالنظر إلى السياق ، propertyDescriptor.componentType ، وصلنا إلى النوع: myClass. إذا نظرت إلى السمات المطبقة على MyClass ، فإنها ستُرجع فقط السمات المطبقة مباشرة على MyClass ، وليس السمة الإضافية المطبقة على خاصية MC.

أنا أكافح من أجل العودة إلى MC حتى أتمكن من قراءة السمات المطبقة هناك. أي شخص أي أفكار؟

إيتا:

لقد أجبته أدناه:

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

المحلول 2

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

DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.

هاهو!

نصائح أخرى

إذا نظرت إلى السمات المطبقة على MyClass ، فإنها ستُرجع فقط السمات المطبقة مباشرة على MyClass ، وليس السمة الإضافية المطبقة على خاصية MC.

السمة المضافة إلى MC لا تتم "إضافة" الخاصية إلى السمات المطبقة على MyClass الصف ... السمات هي بيانات بيانات ثابتة ، لن يكون لديك سمة إضافية MyClass فقط لأن خاصية من النوع MyClass لديه هذه السمة. لا توجد علاقة بين الاثنين.

لا توجد وسيلة لاسترداد MyClass سمات خاصية MC ، إلا إذا قمت باستردادها مباشرة من MyButton الفصل من خلال التفكير:

Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)

لكنك لن تتمكن من استرداد تلك السمات باستخدام TypeDescriptor, ، لأنه يمكن أن يمنحك فقط السمات المحددة على النوع ، وليس على الخصائص

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