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 回答