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ます。

代わりに例外を使用することも考えましたが、それは少しハックのように感じます。イベントを使用してこれを行う方法はありますか?

4

1 に答える 1

3

.キャストよりも優先順位が高いため、括弧を別の場所に配置する必要があります。さらに、より簡単な方法でタイプを確認できます。試す

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

別の方法は

var moduleForm = this.AcquisitionModule as ModuleForm;
if (moduleForm != null) {
    moduleForm.ModuleFormClosed += ...
}
于 2012-10-11T18:01:38.940 に答える