在以编程方式创建表单时,如何覆盖表单的OnShown事件?

时间:2012-07-17 13:06:17

标签: vb.net

我试图在首次显示表单时播放声音(就像标准消息框一样,想要一个更好的例子)。如果使用通过设计器添加的标准表单,我通常会通过覆盖标准的onshown事件来执行此操作,然后继续调用MyBase.OnShown(e)

我现在遇到的问题是表单是以编程方式创建的(Dim myForm是新表单等),因此我似乎无法使用AddHandler来覆盖此事件。我不怀疑我是以完全错误的方式做到这一点,但我很欣赏任何可以提供的建议。我更喜欢从VB.net的角度提出建议,但我可以在C#中轻松搞定。

2 个答案:

答案 0 :(得分:1)

Form.OnShown不是一个事件。相反,它是Form类的一种方法,它会引发表单的Shown事件。以下是解释OnShown方法的MSDN文章:

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.onshown.aspx

使用表单设计器创建派生类时,可以覆盖OnShown方法,但是当您只是通过其公共接口访问表单时,需要使用Shown事件而不是。您可以为此事件添加事件处理程序,如下所示:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim f As Form1 = New Form1()
    AddHandler f.Shown, AddressOf f_Shown
    f.Show()
End Sub

Private Sub f_Shown(ByVal sender As Object, ByVal e As EventArgs)

End Sub

答案 1 :(得分:0)

由于代码中不存在表单,因此您实际上必须调用该事件。

首先尝试写出显示代码:

Public Sub form_Showing(ByVal sender As Object, e As EventArgs)
  // play sound
End Sub

然后在创建表单时,添加事件的处理程序:

Dim f As New Form
AddHandler f.Shown, AddressOf form_Showing
f.Show()