如何在 C# windows 窗体中使用事件作为方法?

Posted

技术标签:

【中文标题】如何在 C# windows 窗体中使用事件作为方法?【英文标题】:How can i Use a Event as method in C# windows form? 【发布时间】:2021-10-10 20:45:53 【问题描述】:
 this.FormClosing();

我想像方法一样使用 C# windows 窗体事件,但会说“事件'Form.FormClosing'可以出现在 += of -="的左侧。我该怎么办?!

【问题讨论】:

这能回答你的问题吗? How to manually invoke an event? 和 Calling an event handler in C# 和 event.Invoke(args) vs event(args). Which is faster? 【参考方案1】:

我认为您应该提供更多关于您要完成的工作的信息。你想运行什么逻辑?

本质上,Form.FormClosing (MSDN Form.FormClosing Event) 被声明为事件,而不是方法。因此,为了分配在该事件发生时运行的逻辑,您需要将事件处理程序连接到它。

this.FormClosing += OnFormClosing;

private void OnFormClosing(object sender, FormClosingEventArgs e)

    // Logic to be performed as the form closes

见:How to add or remove an event handler

如果您尝试在其自然调用路径之外调用事件(即当表单关闭时),您可以尝试以下操作:

if (this.FormClosing != null) this.FormClosing.Invoke(this, EventArgs.Empty);

// Or null shorthand:

this.FormClosing?.Invoke(this, EventArgs.Empty);

How to raise and consume events

但是..如果你想运行在窗口关闭时运行的逻辑,你可以将它移到它自己的方法中,然后运行它。

this.FormClosing += OnFormClosing;

private void OnFormClosing(object sender, FormClosingEventArgs e)

    MyWindowClosingLogic(true);


private void MyWindowClosingLogic(bool isClosing = false)

    if (!isClosing)
    
        System.Diagnostics.Debug.WriteLine("The logic is being run, but the window is not closing...");
    
    else 
    
        System.Diagnostics.Debug.WriteLine("The Window is closing");
    


private void SomeOtherMethod()

    MyWindowClosingLogic();

【讨论】:

以上是关于如何在 C# windows 窗体中使用事件作为方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 Windows 窗体中创建 F1 帮助

捕获托管在 mfc 对话框上的 windows 窗体事件(c#)

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

C# - 从 Windows 服务启动 Windows 窗体 [重复]

当属性更改值时,在 C# Windows 窗体中定义事件[重复]

c#的winform窗体中如何嵌套exe应用程序