如何在VB.NET中处理以编程方式创建的Form的close事件?

时间:2016-08-04 08:39:51

标签: vb.net forms

我是VB.NET的新手,我坚持以下几点:

我想在以编程方式创建的Form关闭之前执行一些操作。

我需要处理我的Form的Close事件(在代码中创建)。

我该怎么做?

以下是他们如何使用C#

{
    Form1 f = new Form1();
    f.FormClosed += new FormClosedEventHandler(f_FormClosed);
    f.Show();
}

void f_FormClosed(object sender, FormClosedEventArgs e)
{
    // Do stuff here
}

2 个答案:

答案 0 :(得分:1)

“但在C#Form中的FormClosed在vb.NET中不可用” - 实际上它是,但如果您当前没有声明,则IntelliSense通常不会显示事件一个事件。

在VB.NET中,您使用AddHandler statement订阅事件。

Dim f As New Form1
AddHandler f.FormClosed, AddressOf f_FormClosed
f.Show()

...

Private Sub f_FormClosed(sender As Object, e As System.FormClosedEventArgs)

End Sub

答案 1 :(得分:1)

在VB.NET中,事件的处理方式略有不同。 如果除了表单的Handles委托声明之外还想使用FormClosed子句,则需要使用Form关键字声明对象(在您的情况下为WithEvents)在模块级别

Private WithEvents frmX AS New Form

然后你可以写:

Private Sub frmX_FormClosed(sender As Object, e As FormClosedEventArgs) Handles frmX.FormClosed

End Sub

然后,编译器将根据需要处理附加和分离处理程序。

如果您想自己控制,请在任意位置声明Form,并根据需要使用AddHandlerRemoveHandler指令:

// Define the handler delegate as usual:
Private Sub frmX_FormClosed(sender As Object, e As FormClosedEventArgs)

End Sub

// Somewhere else in your code use this:

// To attach the handler:
AddHandler frmX.FormClosed, AddressOf Form5_FormClosed

// To detach the handler:
RemoveHandler frmX.FormClosed, AddressOf frmX_FormClosed

.FormClosed / AddHandler上下文中会弹出RemoveHandler。 请注意AddressOf关键字。当您需要指定委托时,它是必需的。