0

假设我有一个对象(例如,Form1)的成员(例如,Button1),该对象(例如,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
4

2 回答 2

0

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

就这样,任何人都试图用谷歌搜索它,却找不到像我一样的东西,我用了 10 分钟的时间来测试它,现在没有其他人需要这样做了!

于 2013-02-01T23:37:33.850 回答
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
于 2013-02-02T04:05:18.583 回答