2012-10-11 2 views
0

내 MEF 기반 응용 프로그램에서 일부 모듈은 양식을 사용하지만 일부 모듈은 양식을 사용합니다.가능한 모든 클래스에서 구현되지 않은 이벤트를 수신하려면 어떻게해야합니까?

이 양식의 폐쇄에 응답 할 수 있기를 원하지만이를 수행하는 방법을 알아낼 수 없습니다. 모듈 유형은 인터페이스를 기반으로하며 폼을 사용하는 모듈 유형은 Windows.Forms.Form에서 상속되는 기본 클래스를 상속합니다.

예.

public partial class SwatchForm : ModuleForm, IAcquisition 

public partial class ModuleForm : Form 

IAcquisition (또는 내 다른 모듈 인터페이스)를 상속하는 모든 것을 ModuleForm에서 상속되지 때문에, 나는이 시도

:

if (this.AcquisitionModule.GetType().IsSubclassOf(typeof(ModuleForm))) 
{ 
    (ModuleForm)(this.AcquisitionModule).ModuleFormClosed += whatever.... 
} 

을하지만 여전히 IAcquisition를 뿌려 ModuleFormClosed이라고하는 것은 없습니다.

대신 예외를 사용하는 것에 대해 생각했지만 해킹과 같은 느낌입니다. 이벤트를 사용하여이를 수행 할 수있는 방법이 있습니까?

답변

3

.은 캐스트보다 우선 순위가 높으므로 괄호를 다르게 배치해야합니다. 또한,보다 간단한 방법으로 유형을 확인할 수 있습니다.

if (this.AcquisitionModule is ModuleForm) { 
    ((ModuleForm) this.AcquisitionModule).ModuleFormClosed += ... 
} 

시도하는 또 다른 방법은

var moduleForm = this.AcquisitionModule as ModuleForm; 
if (moduleForm != null) { 
    moduleForm.ModuleFormClosed += ... 
} 
+0

하 석입니다! 그것은 내가 두려워했던 것보다 간단했다. 브래킷을 옮기는 것이 전부였다. 내가 할 수있을 때 받아 들일 것입니다 (5 분). –

관련 문제