我的编程空间,编程开发者的网络收藏夹
学习永远不晚

VB.NET下如何实现事件和委托

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

VB.NET下如何实现事件和委托

这篇文章给大家分享的是有关VB.NET下如何实现事件和委托的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

委托是可用于调用其他对象方法的对象。它们有时被称为类型安全函数指针,因为它们与其他编程语言中所使用的函数指针相似。但不同于函数指针,VB.NET 委托是基于 System.Delegate 类的引用类型,它可以引用共享方法—无需特定的类实例即可调用的方法和实例方法。

委托在调用过程和被调用过程需要媒介的情况下是很有用的。例如,您可能想让一个引发事件的对象能够在不同的环境下调用不同的事件处理程序。不幸的是,引发事件的对象无法提前知道处理特定事件的事件处理程序。Visual Basic .NET 通过在使用 AddHandler 语句时创建委托,可让您动态地将事件处理程序与事件关联。在运行时,委托将各种调用转发到相应的事件处理程序。

尽管可以创建自己的委托,但在大多数情况下,Visual Basic .NET 为您创建委托并提供具体信息。例如,Event 语句将名为 <EventName>EventHandler 的委托类隐式定义为 Event 语句所在类的嵌套类,且其签字与该事件相同。AddressOf 语句则隐式创建委托的实例。例如,以下两行代码是等效的:

AddHandler Button1.Click    AddressOf Me.Button1_Click   ' AddHandler 指向引发事件的对象,AddressOf则确定该事件对象所要调用的事件处理程序  '上述行为又可以称为 监视  AddHandler Button1.Click, New EventHandler(AddressOf Button1_Click)

只要编译器可以用上下文确定委托的类型,就可以使用速写方法创建委托。

注:处理自基类继承的事件

派生类(继承某个基类特征的类)能用 Handles MyBase 语句处理它们的基类所引发的事件。

处理来自基类的事件

通过给事件处理程序过程的声明行添加 Handles MyBase.<event name> 语句来声明派生类中的事件处理程序,其中的 event name 是基类中正在处理的事件的名称。例如:

Public Class Class1  Public Event SE(ByVal i As Integer)  ' Place methods and properties here.  End Class  Public Class Class2  Inherits Class1  Sub EventHandler(ByVal x As Integer) Handles MyBase.SE  ' Place code to handle events from Class1 here.  End Sub End Class

声明使用现有委托类型的事件

某些情况下,可能会要声明某事件使用现有委托类型为基础委托。以下语法说明了进行声明的方式:

Event AnEvent As DelegateType该语法在将多个事件路由到同一处理程序时是很有用的,不过使用现有委托类型时需要先进行如下定义:

delegate {sub|function} DelegateType(参数1,参数2)

下面是vb.net控制台程序演示单一事件委托多处理程序.

比如说在社会上,你是法律,社会上有三种人,警察、无赖和自愿反扒队。

你规定:如果小偷偷东西,则警察处罚小偷500元钱,自愿反扒队要打无赖进医院一次

这就是现实中的委托。

实际上,在写程序中,程序员就是法律,警察、小偷和自愿反扒队就是三个对象。小偷偷东西是一个方法,小偷还有一个偷东西事件,他偷东西激发这个事件。而警察和自愿反扒队就是两个事件处理对象,警察负责把小偷的钱扣除500,自愿反扒队需要大小偷进医院一次。

所以,委托有如下几个要素:

  • 激发事件的对象--就是小偷

  • 处理对象事件的对象--就是警察和自愿反扒队

  • 定义委托,就是法律让警察和自愿反扒队监视小偷。

如果这三个要素都满足的话,则你就写出了一个完整事件的处理。

下面是vb.net控制台的实例

Imports System  Module Module1   '准备引用 无赖 类的偷东西事件  Public WithEvents w As 无赖  Sub Main()  Console.WriteLine("新的一天开始了....")  ' 实例华警察、无赖、自愿反扒队 类  Dim p As New 警察  w = New 无赖  Dim pp As New 自愿反扒队  '设置对无赖类的偷东西事件的监视,并设置相应的事件处理程序  '如果小偷玩偷东西则引用警察的罚钱处理程序  AddHandler w.PlayGame, AddressOf p.扣钱  '如果小偷偷东西则引用自愿反扒队的打人处理程序  AddHandler w.PlayGame, AddressOf pp.打人  w.偷东西()  Console.WriteLine("天黑了....")  Console.ReadLine()  End Sub 'End Class   Public Class 警察  Sub New()  Console.WriteLine("生成警察......")  End Sub '定义的事件处理程序的参数类型要与定义的委托的参数类型相一致  Public Sub 扣钱(ByVal sender As Object, ByVal e As System.EventArgs)   Console.WriteLine("警察:好小子,胆敢偷东西...")  '定义线程输出迟缓3秒  System.Threading.Thread.Sleep(3000)  Console.WriteLine("警察:看看你小子有多少钱...")  Dim f As 无赖 = sender  System.Threading.Thread.Sleep(3000)  Console.WriteLine("无赖 的钱: " + f.钱.ToString())  System.Threading.Thread.Sleep(3000)  Console.WriteLine("开始扣钱......")  System.Threading.Thread.Sleep(3000)  f.钱 = f.钱 - 500  Console.WriteLine("扣完了....现在无赖 还剩下:" + f.钱.ToString())  System.Threading.Thread.Sleep(3000)  End Sub  End Class Public Class 无赖  '先定义一个偷东西的事件使用现有委托类型 PlayGameHandler为基础委托  Public Event PlayGame As PlayGameHandler  Private m_Money As Integer Private ey As Integer Sub New()  Console.WriteLine("生成无赖....")  m_Money = 1000  ey = 5  End Sub '定义挨打属性用来记录挨打过几次  Property 挨打() As Integer Get Return ey  End Get Set(ByVal Value As Integer)  ey = Value  End Set End Property '定义前属性用来记录有多少钱  Property 钱() As Integer Get Return m_Money  End Get Set(ByVal Value As Integer)  m_Money = Value  End Set End Property '定义偷东西过程  Public Sub 偷东西()  Console.WriteLine("无赖开始偷东西了")  System.Threading.Thread.Sleep(3000)  '实例化事件参数  Dim e As New System.EventArgs  '引发偷东西事件,参数类型要与现有委托类型一致  RaiseEvent PlayGame(Me, e)  End Sub End Class Public Class 自愿反扒队  Sub New()  Console.WriteLine("自愿反扒队来了.....")  System.Threading.Thread.Sleep(3000)  End Sub '定义的事件处理程序的参数类型要与定义的委托的参数类型相一致  Public Sub 打人(ByVal sender As Object, ByVal e As System.EventArgs)  System.Threading.Thread.Sleep(3000)  Console.WriteLine("自愿反扒队:好小子,敢偷东西...")  System.Threading.Thread.Sleep(3000)  Console.WriteLine("自愿反扒队:你小子挨过几次打了...")  Dim bn As 无赖 = sender  System.Threading.Thread.Sleep(3000)  Console.WriteLine("无赖:" + bn.挨打.ToString + "次")  System.Threading.Thread.Sleep(3000)   Console.WriteLine("自愿反扒队:那也得揍你,先来一拳.... ")  System.Threading.Thread.Sleep(3000)  Console.WriteLine("自愿反扒队:再来一脚......")  System.Threading.Thread.Sleep(3000)   Console.WriteLine("自愿反扒队:打完了...赶紧去医院吧...")  End Sub End Class '定义委托类型  Delegate Sub PlayGameHandler(ByVal sender As Object, ByVal e As System.EventArgs)  End Module

感谢各位的阅读!关于“VB.NET下如何实现事件和委托”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

VB.NET下如何实现事件和委托

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

VB.NET下如何实现事件和委托

这篇文章给大家分享的是有关VB.NET下如何实现事件和委托的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。委托是可用于调用其他对象方法的对象。它们有时被称为类型安全函数指针,因为它们与其他编程语言中所使用的函数指针
2023-06-17

C#中如何实现事件和委托的编译

这篇文章给大家分享的是有关C#中如何实现事件和委托的编译的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#事件和委托的编译需求操作C#事件时,有时会得到编译错误:事件“Delegate.GreetingManag
2023-06-18

javascript事件委托理解,jQuery .on()方法一步到位实现事件委托

事件委托是一种处理事件的技巧,可监听父元素上的事件,并针对子元素执行特定操作。jQuery的.on()方法提供了简洁易用的方式来实现事件委托。它允许在父元素上附加一个事件句柄,当子元素触发事件时,事件会冒泡到父元素并触发事件句柄,从而检查目标元素是否与子元素选择器匹配。如果匹配,则调用事件处理函数。事件委托的主要优点包括性能优化、代码简化和动态元素处理。
javascript事件委托理解,jQuery .on()方法一步到位实现事件委托
2024-04-02

怎么在JavaScript中实现事件委托

怎么在JavaScript中实现事件委托?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。事件委托利用事件冒泡,指定一个事件处理程序,管理一系列的所有事件事件委托利用DOM元素
2023-06-15

js中的事件委托怎么实现

在JavaScript中,可以通过事件委托来简化事件处理程序的绑定和管理。事件委托是将事件处理程序绑定到其父元素,然后通过冒泡机制来处理子元素上的事件。以下是一个简单的示例,演示了如何使用事件委托来处理点击事件:```javascript/
2023-09-29

C#中的委托和事件实例分析

本文小编为大家详细介绍“C#中的委托和事件实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中的委托和事件实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、定义委托delegate void S
2023-06-30

C#中如何使用委托和事件处理程序

C#中如何使用委托和事件处理程序,需要具体代码示例在C#中,委托和事件处理程序是两个非常重要的概念,它们可以用于实现事件驱动的编程模型。委托提供了一种将方法作为参数传递的机制,而事件处理程序则用于处理特定事件的方法。本文将详细介绍C#中如何
2023-10-22

VB.NET如何实现事件触发

这篇文章主要为大家展示了“VB.NET如何实现事件触发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET如何实现事件触发”这篇文章吧。VB.NET中的事件是一个非常重要的概念。对于初学者
2023-06-17

VB.NET如何实现远程事件

这篇文章主要为大家展示了“VB.NET如何实现远程事件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET如何实现远程事件”这篇文章吧。在不同工程之间完成触发事件的工作,这在VB中是不能做
2023-06-17

如何将 JavaScript 事件委托与其他技术相结合?(JavaScript事件委托如何与其他技术结合)

在前端开发中,JavaScript事件委托是一种非常实用的技术,它可以有效地减少事件处理程序的数量,提高性能,并使代码更易于维护。然而,事件委托并不是孤立的,它可以与其他技术结合使用,以实现更复杂的功能。本文将介绍如何将JavaScript事件委托与其他技术相结合,帮助你更好地理解和应用
如何将 JavaScript 事件委托与其他技术相结合?(JavaScript事件委托如何与其他技术结合)
JavaScript2024-12-19

事件委托模式怎么在java项目中实现

这篇文章将为大家详细讲解有关事件委托模式怎么在java项目中实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java实现事件委托模式的实例详解举例说明:一个班级,有两类学生,A类:不学习,
2023-05-31

如何使用 JavaScript 事件委托来处理复杂交互?(JavaScript事件委托怎样处理复杂交互)

在JavaScript开发中,处理复杂交互是一项常见且重要的任务。事件委托是一种有效的技术,它可以帮助我们更高效地处理大量的DOM元素的事件。下面我们将详细介绍JavaScript事件委托怎样处理复杂交互。一、事件委托的基本概念
如何使用 JavaScript 事件委托来处理复杂交互?(JavaScript事件委托怎样处理复杂交互)
JavaScript2024-12-20

如何通过 JavaScript 事件委托来简化代码逻辑?(JavaScript事件委托怎样简化代码逻辑)

在JavaScript开发中,代码的简洁性和可维护性是非常重要的。而事件委托就是一种能够有效地简化代码逻辑的技术。一、什么是JavaScript事件委托?事件委托,也称为事件代理,是一种利用事件冒泡的特性,将事件处理程序
如何通过 JavaScript 事件委托来简化代码逻辑?(JavaScript事件委托怎样简化代码逻辑)
JavaScript2024-12-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录