C# Windows Form中如何将Event事件当作普通方法调用?
报错原因
C# 中的事件是对委托的安全封装,默认仅允许声明事件的类内部直接触发,外部只能通过 += 订阅事件、-= 取消订阅,你直接编写 this.FormClosing() 属于尝试在类外部直接调用事件,不符合C#语法约束,因此抛出对应错误。
解决方案
根据你的实际业务需求,可选择以下任意一种方式处理:
- 方案1:走完整窗体关闭流程,自动触发FormClosing事件
如果你本来就是要执行窗体关闭的全流程,直接调用Close()方法即可,Form内部会自动触发FormClosing、FormClosed等关联事件,同时完成窗体资源释放等内置逻辑:
this.Close();
- 方案2:直接调用绑定到FormClosing的自定义处理方法
如果你不需要真的关闭窗体,只是想执行你绑定到FormClosing事件的自定义逻辑,直接调用对应的事件处理方法即可。比如你绑定的处理方法是Form1_FormClosing,可以这么写:
// 按需构造事件参数:第一个参数为关闭原因,第二个参数为是否取消关闭操作 FormClosingEventArgs args = new FormClosingEventArgs(CloseReason.UserClosing, false); Form1_FormClosing(this, args);
- 方案3:封装触发方法,支持外部手动调用事件
如果你需要在Form子类外多次手动触发FormClosing事件,可以在Form类内部新增公开的触发方法:
public partial class YourCustomForm : Form { public void TriggerFormClosing(CloseReason reason = CloseReason.UserClosing, bool cancel = false) { var args = new FormClosingEventArgs(reason, cancel); base.OnFormClosing(args); } } // 外部调用时直接执行对应方法即可 yourFormInstance.TriggerFormClosing();
注意:常规窗体关闭场景优先使用
Close()方法,不要随意绕过内置流程手动触发事件,避免出现资源泄漏、MDI子窗体未同步关闭等异常问题。
内容的提问来源于stack exchange,提问作者mahdi noroozi
相关产品推荐
相关产品推荐

