假设我有一个对象(例如,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
答案 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