2010-01-20 4 views
0
그것은 제목이 아주 간단하지 말합니다 것 같은

에 속성의 부모에 적용되는 속성을 검색하지만 난 당신이 이해할 수 있기를 바랍니다. ,는 .NET

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에 적용된 속성을 보면, 속성 MC에 적용된 추가 속성이 아니라 MyClass에 직접 적용된 속성 만 반환합니다.

나는 내가 거기에 적용되는 속성을 읽을 수 있도록 다시 MC로 얻기 위해 사투를 벌인거야. 누구든지 아이디어가 있습니까?

ETA는 :

나는 아래에 대답했습니다 : 내가 MyClass에 적용되는 속성을 보면

답변

0

에, 유형에 정의 된 속성을 줄 수 있기 때문에 TypeDescriptor는이 후기 바인딩없이 가능하다. 방법은 다음과 같습니다.

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

Voila!

1

는하지만, 그것은 단지 여분을 MyClass에 직접 적용 속성을 반환하지 않습니다 특성 MC에 적용됩니다.

속성이 MyClass 클래스에 적용되는 속성 ... 속성은 정적 메타 있습니다에 "추가"되지 않은 MC 속성에 추가, 당신은 MyClass에 추가 속성이되지 않습니다 단지 때문에 유형의 속성 MyClass에이 속성이 있습니다. 두 사람 사이에는 아무런 관련이 없습니다.

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

하지만 사용하여 이러한 속성을 검색 할 수 없습니다 : 당신은 반사를 통해 MyButton 클래스에서 직접 검색하지 않는 MyClass에가의 MC 속성의 속성을 검색 할 수있는 방법이 없습니다

그것은 단지 당신에게 토마스 내 댓글에 더하지 실제로 속성

+0

견과류, 그건 내가 생각한 것입니다. 나는 컨텍스트가 GridEntry라는 사실을 사용하여 늦은 바인딩으로 처리했지만, 그런 일을 할 때 XFactoring이 필요하다고 생각합니다. – Jules