2013-11-21 2 views
0

나는 모달이 아닌 대화 상자로 표시 할 창 형식을 사용하고 있습니다. 결과적으로 나는 오버로드 된 Show (IWin32Window 소유자) 메서드를 그 폼에서 호출하려고합니다. 문제는 내가 여기에서 사용하고자하는 부모 형태 중 하나가 프로젝트에서 접근 할 수 없다는 것입니다. 결과적으로 아래 코드와 같은 것을 사용하여 리플렉션을 사용하여로드하려고합니다.리플렉션을 사용하여 IWin32Window를 리플렉션을 사용하여 가져 오는 방법

var frm = Assembly.GetEntryAssembly().GetTypes().Where(f => f.Name == "ParentForm").FirstOrDefault(); 

그러나 다음과 같은 컴파일 오류가 발생합니다.

'System.Windows.Forms.Form.Show (System.Windows.Forms.IWin32Window)' 에 가장 적합한 오버로드 된 메서드에 일치하는 일부 잘못된 인수가

인수 1 : 변환 할 수 없습니다 에 'System.Type' 'System.Windows.Forms.IWin32Window'에서

이를 달성하는 방법에 대한 어떤 제안?

+0

리플렉션을 사용하면 실제 'ParentForm'인스턴스가 아닌 'ParentForm'에 해당하는 'Type'이 표시됩니다. –

+0

리플렉션을 사용하여 얻을 수 있습니까? –

+2

리플렉션을 사용하여 인스턴스를 가져올 수 없습니다. 'Type'과 관련된 속성을 발견하기 위해서만 사용됩니다 – Xenolightning

답변

2

아마도 Application.OpenForms 컬렉션을 검색하고 싶을 것입니다.

Form f = Application.OpenForms.Where(x => x.GetType().Name == "ParentForm").FirstOrDefault(); 
+0

좋은 생각입니다. 리플렉션을 통해 먼저 유형을 검색 한 다음 언급 한 API의 모든 열린 양식에서 해당 유형을 찾았습니다. 문제 해결 ... 당신은 남자 !!!!!!!!!!! –

+0

@PaulSnow : 컬렉션의 각 Form에 대해 GetType()을 호출하고 이름을 확인했다고 생각합니다. * 모든 * 유형의 이름과 기타 메타 데이터를 가져 오는 것보다 각 양식 유형의 이름을 얻는 것이 .NET에서 조금만 효과가 있습니다. 하지만 다행 이네. –