You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 22:30:03