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

时间:2009-10-13 20:45:31

标签: .net vb.net events event-handling override

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

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

3 个答案:

答案 0 :(得分:3)

如果您想在表单关闭前进行一些额外的清理,请在表单Form Closing event中执行此操作。

此活动还允许您在活动FormClosingEventArgs.Cancel property附近取消表单。事件的CloseReason属性会告诉您调用事件的原因(您需要检查CloseReason.UserClosing

答案 1 :(得分:2)

重新提出你的意见;在事件被触发之前做任何事情为时过早;毕竟,其他一些代码可能取消关闭,你会留下一个破旧的形式。就个人而言,我很想覆盖OnClosed;不是很多VB头,而是在C#中:

    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
    }

答案 2 :(得分:1)

如果您觉得将代码放在Form_Closing事件中感觉不舒服,我所知道的唯一其他选项就是我曾经使用过一次或两次的“hack”。没有必要诉诸这个黑客,但这里是:


请勿使用常规关闭按钮。而是创建您的表单,使其没有ControlBox。你可以通过在窗体上设置ControlBox = false来做到这一点,在这种情况下,你仍然可以在窗体的顶部有一个普通的条,或者你可以将窗体的FormBorderStyle设置为“None。如果你去第二条路线,那里在顶部或任何其他可见边框上都没有条形图,因此您必须通过在表单上绘图或通过艺术使用Panel控件来模拟它们。

然后你可以添加一个标准按钮并将其作为关闭按钮 ,并将清理代码放在那里。在按钮事件结束时,只需调用this.Close()(C#)或Me.Close()(VB)