【发布时间】:2014-12-28 13:50:20
【问题描述】:
我是 VB.Net 的新手(我来自 foxpro 背景),并且在过去的两周里一直在努力学习一些基础知识。
我正在尝试掌握类继承,并希望得到一个不太具有挑战性的问题。
我创建了一个类并将其编译为 DLL。它只是允许我在表单上放置一个按钮。我只想捕获 Click 事件 - 我已经设法做到了,但想覆盖继承的代码,而不是同时发生目前似乎正在发生的两种火灾。
我意识到我可以双击控件并直接在 MyButton1 点击事件中输入代码,但我想通过处理程序以编程方式捕获它。
我认为这只是使用可覆盖/覆盖选项的情况。
这是我课堂上的代码:
Imports System.Windows.Forms
Imports System.Drawing
Public Class MyButton
Inherits Windows.Forms.Button
Sub New()
End Sub
Protected Overridable Sub MyButton_Click(sender As Object, e As System.EventArgs) Handles Me.Click
MsgBox("Base Click")
End Sub
End Class
然后我将按钮放在我的表单上并将其命名为 MyButton1 并在加载事件中:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler MyButton1.Click, AddressOf Button_Click
End Sub
Private Sub Button_Click()
MsgBox("Actual Click")
End Sub
问题是,两个事件都会触发,我想要覆盖/关闭基本事件的选项。
我想我可以将“覆盖”关键字添加到 Button_Click 例程,即:
Private Sub Overrides Button_Click()
但我收到一条错误消息无法将子 Button_Click() 声明为“覆盖”,因为它不会覆盖基类中的子项
所以澄清一下 - 目前我的代码触发了两个事件,所以我收到了两条消息。我希望能够关闭/抑制基类事件。
任何帮助将不胜感激。
【问题讨论】:
-
您必须改写 OnClick。在 MyButton 类中,而不是表单中。如果您不调用 MyBase.OnClick,则不会引发 Click 事件。
标签: vb.net