VB.NET中的sender、e和handles
2012-02-08 17:15
218 查看
由于收费系统中,碰到几次事件的调用,对其中参数不是很理解,就总结了一下vb.net中的事件。
在vb6.0中事件非常简单,就拿最常用的单击按钮事件来说,vb中的代码是:
调用command1的单击事件也很简单:
在vb6.0中,调用事件是根据事件名来调用的,不需要参数。
但是在vb.net中,事件添加了参数:
在vb.net中事件多了三个附加信息:sender、e和handles。仍以button1的单击为例,说明这三个参数的含义:
注意观察,原本的button_Click变为了but_Click,这在vb6.0中是不会执行的,但在vb.net中不影响事件的执行,说明在vb.net中,事件不再仅依赖事件名。下来来看一下执行结果截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/93c0567f2b5e81e492209588e7b98558.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/8cf61ee3166044736a1ff4e62e2b5f2b.gif)
sender 的类型为object类型,显示的结果说明的是:直接引起事件的是form的button,button上的文字为“Button1”。e的类型是EventArgs,类型解释为:EventArgs是一个委托声明,是包含事件数据的类的基类,用于传递事件的细节,第二个截图显示的说明是:为这个事件提供数据的是鼠标。
再说handles,在我理解看来,这是一个委托,相当于由handles后面的参数间接引发事件,下面我说一下我对单击button1事件执行过程的理解:当单击button1时,handler后面的button1间接引发事件,事件的直接引发者是button1这个按钮即sender,然后鼠标把需要执行事件所需的参数传递给事件即e,然后代码执行。以button1和button2的单击事件为例:
单击button1的结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/e1f129ec40a60497e4e00bc283916229.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/243f7e1328b9810722daff93124aefd4.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/528f680faadbd9735afbc5889920822a.gif)
这说明,单击button1时还增加了button2的单击事件,需要说明的是,这样的代码方法,单击button1,会先执行button2的代码,再执行button1的代码。
这两行代码想对容易理解,需要说明的是addhandler和removehandler后面的第一个参数是“委托谁执行调用的事件”,第二个参数是“要执行的事件”,通过这两行代码可以在第三方事件中很容易进行事件的委托和取消委托。
在vb6.0中事件非常简单,就拿最常用的单击按钮事件来说,vb中的代码是:
Private Sub Command1_Click() MsgBox ("你点击了button1") End Sub
调用command1的单击事件也很简单:
Private Sub Command2_Click() Command1_Click End Sub
在vb6.0中,调用事件是根据事件名来调用的,不需要参数。
但是在vb.net中,事件添加了参数:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("你点击了button1") End Sub
在vb.net中事件多了三个附加信息:sender、e和handles。仍以button1的单击为例,说明这三个参数的含义:
Private Sub But_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(sender.ToString) MsgBox(e.ToString) End Sub
注意观察,原本的button_Click变为了but_Click,这在vb6.0中是不会执行的,但在vb.net中不影响事件的执行,说明在vb.net中,事件不再仅依赖事件名。下来来看一下执行结果截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/93c0567f2b5e81e492209588e7b98558.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/8cf61ee3166044736a1ff4e62e2b5f2b.gif)
sender 的类型为object类型,显示的结果说明的是:直接引起事件的是form的button,button上的文字为“Button1”。e的类型是EventArgs,类型解释为:EventArgs是一个委托声明,是包含事件数据的类的基类,用于传递事件的细节,第二个截图显示的说明是:为这个事件提供数据的是鼠标。
再说handles,在我理解看来,这是一个委托,相当于由handles后面的参数间接引发事件,下面我说一下我对单击button1事件执行过程的理解:当单击button1时,handler后面的button1间接引发事件,事件的直接引发者是button1这个按钮即sender,然后鼠标把需要执行事件所需的参数传递给事件即e,然后代码执行。以button1和button2的单击事件为例:
Private Sub But_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("你点击了button1") End Sub Private Sub Butt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button1.Click MsgBox("你点击了button2") MsgBox(sender.ToString) 'AddHandler Button1.Click, AddressOf Button3_Click End Sub
单击button1的结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/e1f129ec40a60497e4e00bc283916229.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/243f7e1328b9810722daff93124aefd4.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/01/528f680faadbd9735afbc5889920822a.gif)
这说明,单击button1时还增加了button2的单击事件,需要说明的是,这样的代码方法,单击button1,会先执行button2的代码,再执行button1的代码。
AddHandler Button1.Click, AddressOf Button3_Click RemoveHandler Button1.Click, AddressOf Button3_Click
这两行代码想对容易理解,需要说明的是addhandler和removehandler后面的第一个参数是“委托谁执行调用的事件”,第二个参数是“要执行的事件”,通过这两行代码可以在第三方事件中很容易进行事件的委托和取消委托。
相关文章推荐
- The VB.NET sender and e Event Parameters
- VB.net中的sender和e
- VB.net中的sender和e
- VB.NET中Handles的作用
- vb.net eventargs sender and e
- 【转】VB.net是怎样做到的——Handles和WithEvents
- [VB.NET]急:关于客户端与sap服务器端链接问题!!!!
- VB.net使用HTML解析组件HtmlAgilit…
- [VB.NET]如何获取某个字段 数据的种类(ADO.NET+ACCESS)
- 用Delphi 、VB.net以及C#混合编程
- VB.Net 中 WithEvents、AddHandler
- VB.NET 获取CPU ID
- DotNetNuke的Skin.vb代码流程分析
- [VB.NET]曲线的绘制!!!
- [VB.NET]如何定义使用一个跟窗体生存期相同的数组
- 用ASP.NET(VB)创建WINDOWS 2000/2003 SERVER站点
- VB.NET 转换为 C#
- vb.net 教程 3-4 窗体编程 公共控件9 ListView 4
- [转] 在水晶报表中实现任意选择指定字段显示 (vb.net vs2003) [来自--http://blog.csdn.net/rainbowsoftware/]
- [VB.NET]关于调用MYSQL 请教各位