使用Visual Basic.NET重载事件处理程序

visual|程序

使用 Visual Basic .NET 重载事件处理程序
Matthew A. Stoecker
Visual Studio Team
Microsoft Corporation
2002 年 2 月

概要:本文介绍在 Visual Basic? .NET 中编程时,如何重载事件处理程序。同时还讨论如何使用 Handles 子句。

目录
简介
前提
继承的事件处理程序
组件中继承的事件处理程序
总结
简介
在继承控件或组件时,将创建封装基类的所有功能的新控件或新组件。基类定义的所有事件处理程序都包含在继承的组件中。本文将分析与继承的事件处理程序相关的问题,并具体讨论如何使用 Visual Basic .NET 开发应用程序。

前提
您应该非常了解继承和面向对象的编程。有关详细信息,请参阅 Polymorphism in Components(英文)。
继承的事件处理程序
在继承某个组件时,该组件的所有成员都被并入新类中。事件处理程序是在响应组件接收的特定事件时执行的方法,并且它是和其他组件成员一同被继承的。以下示例显示了一个典型的事件处理程序:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e as _
System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" 此按钮已被单击 " & _
Counter.ToString() & " 次。")
End Sub
只要发生 Button1.Click 事件,就会执行以上方法。方法声明末尾的 Handles 子句将方法与事件进行关联。这是组件中事件处理程序的典型结构。

为了在继承类中重载此方法,必须添加 Overridable 关键字,并将访问级别更改为 Protected、Protected Friend 或 Public。以下示例显示了一个可以被重载的事件处理程序:

Protected Overridable Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" 此按钮已被单击 " & _
Counter.ToString() & " 次。")
End Sub
组件中继承的事件处理程序
重载继承的事件处理程序与重载任何其他类型的继承方法基本相同,唯一不同之处在于:在重载继承的事件处理程序时,必须删除 Handles 子句。

重载继承组件中的方法

将 Overrides 关键字添加到方法声明中。
注意:不要在方法中添加 Handles 子句。事件处理程序已经与基类中的事件相关联,并且此关联将传递到继承类中。也就是说,当引发事件时将执行此方法,而不再需要额外的 Handles 子句。
以下示例显示了如何重载前面示例中的事件处理程序:

Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs)
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" 此继承的按钮已被单击 " & _
Counter.ToString() & " 次。")
End Sub
为什么不需要 Handles 子句
Handles 子句不再与此方法相关联。这并不是疏忽,而是 .NET 框架处理事件的一项重要内容。事件处理程序已经与基类中的事件相关联,并且此关联将传递到继承类中。也就是说,当引发事件时将执行此方法,而不再需要额外的 Handles 子句。如下所示,如果添加 Handles 子句,将创建与事件的附加关联,这会使方法在每个事件中被执行两次。

' 不正确的代码
Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
' 每次单击按钮时,此变量将递增
' 两次。
Counter += 1
' 每次单击按钮时,消息框将显示
' 两次,并显示不准确的信息。
MessageBox.Show (" 此继承的按钮已被单击 " & _
Counter.ToString() & " 次。")
End Sub
总结
重载事件处理程序可能造成一些不易察觉的问题,并导致难以查出的错误。因此,设置与事件处理程序的正确关联是非常重要的。请小心使用,并注意已经存在的事件关联。

时间: 2024-11-03 13:55:48

使用Visual Basic.NET重载事件处理程序的相关文章

visual basic-Visual Basic关于KeyPress事件的问题

问题描述 Visual Basic关于KeyPress事件的问题 怎么样才能在Visual Basic 6.0用KeyPress事件实现文本框制表位的移动,而不是文本框的移动? 解决方案 Private Sub Form_KeyPress(KeyAscii As Integer) if keyascii = vbkeyright then keyascii = 0end ifsendkeys ""{tab}""End Sub

WSS3SDK之如何创建一个事件处理程序Feature

本例将展示如何添加一个简单的事件处理器来阻止从某列表中删除列表项.这个任务包括两个步骤: 在Visual Studio中创建事件处理程序 将事件处理程序作为Feature添加到WSS中 在Vistual Studio中创建一个事件处理程序 在Visual Studio中通过点击文件->新建->项目来新建一个项目 在新建项目对话框中,选择项目类型为 Visual C# ,模板选择类库 , 名称框中输入 DeletingEventHandler ,然后点击确定. 在解决方案管理器中,选择 Dele

visual studio 2013-visual studio的事件处理程序向导中消息类型为空

问题描述 visual studio的事件处理程序向导中消息类型为空 我创建了一个简单的win32项目,然后添加了一个菜单资源,添加了几个菜单项. 然后我右键使用"事件处理程序向导",它的"消息类型"框中是空的,正常的应该有一些消息类型的.如图:

与Visual Basic .NET一起使用.NET Framework(转)

visual 使用.NET Framework,Microsoft Visual Basic开发人员可以创建健壮的.在先前的Visual Basic版本中很难编写的应用程序.本文将讨论使用.NET Framework的好处,并且将包括一些功能强大的.Visual Basic开发人员可以与该框架一起使用的特性,包括多线程和线程池(thread pooling).Windows服务和文件系统监控等. 为什么使用框架 单词框架(framework)有几种含意.在这种情况中,它指的是创建和运行应用程序的

Visual Basic 6.0 控件和 .NET 控件的区别后记

visual|控件|区别 Public Class frmTest    Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code "     Public Sub New()        MyBase.New()         'Windows 窗体设计器必需此调用.        InitializeComponent()         '调用 InitializeCom

在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组

visual|创建|控件|数组 在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组 Matthew A. StoeckerVisual Studio TeamMicrosoft Corporation 2002 年 1 月 摘要:本文介绍如何使用 Visual Basic .NET 和 Visual C# .NET 创建和管理控件数组. 目录 简介 前提 创建项目 实现集合 公开控件数组 创建公共事件处理程序 测试项目 总结 简介数组为使用共享公共功能的控件

在 Visual Basic .NET创建控件数组

visual|创建|控件|数组 在 Visual Basic .NET创建控件数组 简介数组为使用共享公共功能的控件组提供了一种方便的方式.例如,控件组可以用来显示相关数据,或者在单击时提供相关的操作.Visual Basic .NET本身并不支持创建控件数组,但您可以通过编程来复制控件数组的全部功能.本文将指导您创建一个复制控件数组功能的简单组件. 控件数组的某些用处如下所示: 通过索引访问具有相同名称的控件集合,您可以按编号检索和设置属性,并遍历数组中的所有控件.这一操作的典型语法如下:'

VB.NET的Override事件处理程序

程序 VB.NET的Override事件处理程序 介绍 在类或控件的继承中,子类或子控件封装了父类的所有函数,其中包括事件处理程序.本文将着重讨论在 Visual Basic .NET 应用程序设计中如何正确对待事件处理程序的继承. 读者要求 本文假定读者熟悉面向对象程序设计和类的继承性.若您尚未熟悉它们,请参阅<组件的多态性> ("Polymorphism in Components"). 继承事件处理程序 当组件被继承时,它的所有成员都被封装到子类中.事件处理程序是响应

Visual Basic 6.0 控件和 .NET 控件的区别(续)

visual|控件|区别 图 1:典型的数据输入屏幕 如图 1 所示,在用键盘键入数据的输入窗体上,您可能希望使 Add.Update.Delete 和 Clear 按钮保持在窗体的右下角.要实现此目的,请突出显示这些按钮,然后将 Anchor 属性设置为 BottomRight.要执行此操作,请在 Properties 窗口中找到 Anchor 属性,并单击其下拉箭头.清除选择左边和上边的栏,然后选择右边和下边的栏,如图 2 所示. 图 2:已激活 Anchor 下拉列表的 Propertie