如何在 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 窗体中使用事件作为方法?的主要内容,如果未能解决你的问题,请参考以下文章
捕获托管在 mfc 对话框上的 windows 窗体事件(c#)
使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)
C# - 从 Windows 服务启动 Windows 窗体 [重复]