WITHEVENTS +手柄+覆盖

时间:2013-02-01 23:33:40

标签: vb.net

假设我有一个对象(例如,Form1)的成员(例如,Form1)使用withevents(例如,Form1.Button1_Click)进行了延迟,并且在该对象中有一个带有“Handles”的处理程序。

如果我覆盖它(例如,Form2.Button1_Click),处理程序是否会调用覆盖版本(如me.Button1_Click)或具有实际句柄的版本(如MyClass.Button1_Click)?

这是我试过的:

Public Class Form1

    Public Overridable Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("Form1's Button")
    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim f2 As New Form2
        f2.Show()
    End Sub
End Class

Public Class Form2
    Inherits Form1

    Public Overrides Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        MsgBox("Form2's Button")
    End Sub

End Class

2 个答案:

答案 0 :(得分:0)

调用被覆盖的版本。当我单击Form1上的button1时,我得到'Form1的按钮'。当我使用button2启动第二个表单时,单击button1,然后获取'form2的按钮'

所以任何人都试图谷歌这一点并且没有发现我做的事情,我杀了10分钟来测试它,现在没有其他人需要!

答案 1 :(得分:0)

指定Overridable修饰符表示可以覆盖该方法。

要覆盖 reject or cancel (a decision, view, etc.)

Overrides指定该方法将覆盖现有的事件处理程序实现。除非您手动调用,否则永远不会调用Form1中的现有方法。您可以使用MyBase关键字手动调用它,这实际上允许您引用当前实例的基类。

Public Overrides Sub Button1_Click(sender As Object, e As EventArgs)
    MessageBox.Show("SecondForm's Button")
    MyBase.Button1_Click(sender, e)
End Sub