2010-02-08 2 views
3

나는 Excel.PivotField가 있다고 가정하고 객체에 HiddenItemsList을 설정해야합니다. 문제는이 보안 설정으로 작동하지만 당신이 Option Strict OnOption Explicit On을 설정할 때NewLateBinding.LateSet 리플렉션 호출

Dim field as Excel.PivotField = MyFunctionCall()
field.HiddenItemsList = GetHiddenItems()

, 그것은 분명 작동하지 않습니다 VB.NET으로

Option Strict Off & Option Explicit Off이 될 것입니다.

IDE에서 PivotField의 HiddenItemsList 속성을 확인할 수 없습니다 (첫 번째 문제).

그러나 후기 바인딩을 사용하면 완벽하게 작동합니다.

이제 다음 단계는 Option Strict와 Explicit를 활성화하는 것입니다 (앞으로 C#으로 변환 할 예정입니다).

NewLateBinding.LateSet(field , Nothing, "HiddenItemsList", New Object() { GetHiddenItems() }, Nothing, Nothing)
쉬운 권리 :

그래서 나는 코드를 컴파일하는 방법을 보면?

그러나이 코드는 Microsoft.VisualBasic 네임 스페이스에 의존합니다. 그리고 당연히, 우리는 그것을 원하지 않습니다.

그래서 나는 일반 반사 호출로 변환 시도 :

GetType(Excel.PivotField).GetProperty("HiddenItemsList").SetValue(field , GetHiddenItems() , Reflection.BindingFlags.SetProperty, Nothing, Nothing, Nothing)

는 불행히도 첫 번째 부분 (GetType(Excel.PivotField).GetProperty("HiddenItemsList"))가 이미 Nothing를 반환, 그래서 거기에 붙어있어.

도와 주시겠습니까? ;-)

답변

0

항상 자신의 질문에 대답 해주십시오.

GetType(Excel.PivotField).GetProperty("HiddenItemsList")은 Nothing을 반환하므로 다른 방법이 필요합니다.

Type에 대한 방법이 있습니다 (예 : InvokeMember). 올바른 속성을 사용하면 작동합니다. 여기

다른 SO-ERS에 대한 대답입니다 : D

GetType(Excel.PivotField).InvokeMember("HiddenItemsList", Reflection.BindingFlags.SetProperty, Nothing, field, New Object() {GetHiddenItems() }, Nothing, Nothing, Nothing)

건배