用户单击X时VB.NET重载默认功能(关闭程序)

用户单击X时VB.NET重载默认功能(关闭程序),.net,vb.net,events,event-handling,overriding,.net,Vb.net,Events,Event Handling,Overriding,当用户在基于VB.NET表单的应用程序中单击X时,如何覆盖默认功能 我目前正在处理MyBase.Closing事件。。。但由于它是DirectX应用程序,我需要在允许窗体关闭之前进行一些清理 如果要在窗体关闭前进行额外清理,请在窗体的 此事件还允许您在事件结束时取消表单关闭。该事件的属性将告诉您调用该事件的原因(您可以检查)如果您不愿意将代码放在关闭事件的表单中,我知道的唯一其他选项是我使用过一两次的“hack”。不必求助于此黑客,但它是: 不要使用正常的关闭按钮。相反,创建表单,使其没有控制

当用户在基于VB.NET表单的应用程序中单击X时,如何覆盖默认功能


我目前正在处理MyBase.Closing事件。。。但由于它是DirectX应用程序,我需要在允许窗体关闭之前进行一些清理

如果要在窗体关闭前进行额外清理,请在窗体的


此事件还允许您在事件结束时取消表单关闭。该事件的属性将告诉您调用该事件的原因(您可以检查)

如果您不愿意将代码放在关闭事件的表单中,我知道的唯一其他选项是我使用过一两次的“hack”。不必求助于此黑客,但它是:


不要使用正常的关闭按钮。相反,创建表单,使其没有控制框。您可以通过在表单上设置ControlBox=false来实现这一点,在这种情况下,表单顶部仍然会有一个普通条,或者您可以将表单的FormBorderStyle设置为”“没有。如果您走第二条路线,则顶部将没有横过的条或任何其他可见边界,因此您必须通过在窗体上绘制或通过艺术性地使用面板控件来模拟这些条


然后,您可以添加一个标准按钮,使其看起来像一个关闭按钮,并将清理代码放在其中。按钮事件结束时,只需调用
this.Close()
(C#)或
Me.Close()
(VB)

即可查看其他注释;在事件发生之前做任何事情都为时过早;毕竟,其他一些代码可能会取消关闭,而您将留下一个被破坏的表单。就我个人而言,我很想在关闭时覆盖
;不太像VB的脑袋,但在C#中:


你能补充一点关于为什么关闭事件对于这种情况来说不够好的细节吗?我需要将程序关闭事件发布到我们的自定义事件管理器,以便应用程序能够以干净的方式关闭。许多事情需要解开或清理,例如任何未保存的数据或与服务器或其他客户端的连接。这不是此应用程序的选项。当用户单击X时,我需要进行一些清理,而此清理无法从关闭事件启动。我的问题与覆盖X按钮的功能有关。当窗体关闭事件触发时,窗体不必关闭。你可以取消它。那不适合你的需要?那不适合我的needs@Jay里格斯:-1*(-1)对于智能双否定答案:)
    protected override void OnClosing(CancelEventArgs e)
    {
        // check OK to close (save/cancel etc)
        base.OnClosing(e);
    }
    protected override void OnClosed(EventArgs e)
    {
        // your code here
        base.OnClosed(e);
        // or here
    }