微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB.NET之旅十二―事宜驱动

内容摘要:
...当自己写代码调用某事件程序时,就要写明sender是何物了......比如Mousedown事件,系统需要断定mouse的位置、判断是左中右哪个键点击了、判断点击了几下品等,因此该e就必需是System.Windows.Forms.MouseEventArgs类的范例...... “足以这样说,你难道看不出VB.NET提供给我们的是更通盘、更直接的克制吗?再说e,表示的是事件数据,就是一个事件激励所需要的状态信息...

Henry的VB.NET之旅(十二)―事变驱动

韩睿

“可视承继原来这样方便!”我心中地感叹一声。不一忽儿之后,我掉头扫了一眼屏幕上的代码后,忽然发现了一度新问题,按钮的单击事件程序现时已经变成了:

VB.NET程序

VB程序

Private Sub btnProtected_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnProtected.Click

MsgBox("派生的卫护按钮")

End Sub

Private Sub Command1_Click()

……

End Sub

而原来的VB程序是那么的简约。现在的参量Sender和e是为什么用的?那个Handles又是什么小编?还好有老师,我即刻起身,厚着脸把大李请过来,把瓜田李下一一说给他听。

大李推了推镜子,反诘我道:“你不必对Windows编程中的事件驱动程序设计很稔知吧?”(注:此处的Windows是指Win9X及其之上的操作类别)

“是呀!”看来反问是大李授课的开篇词了,但我也只好先往他的牢笼里跳,“事件驱动就是说应用程序的执行流程是由外界现出的事件所确定的。也就是禁受就职务才职业的模式。事件就是一个信号,它告知应用程序有不足道情形要产生。切实上的执行变故是,各个应用程序把负责相反作业的目标在其运行限期送入Windows操作系统,让该署对象等待Windows产生的事件,然后加以处理。”

VB程序员一般也只需求象你这样理解就行了。”大李的话真让我感动,“应该说是Windows先产生音信,应用程序中的窗口程序window procedure能接收来自windows的时事,并将其转化为事件,某个我们之后再说。现在来看看事件驱动程序的组成,主要是有事件对象事件处理程序三个要素。对象就是兑现任务的主体,比如你说的Button1;事件么,就是对象要执行的任务,比如单击,就是click事件;那么事件处理程序就是Button1_Click这段程序了。”

“这个我知道呀!我只是想问一下Sender……”我疑惑地回应道。

大李哥摇摇手,打断了我的话。“那么你真正清楚事件驱动的话,就明白了。你看一下,Sender是什么类型的变量?”

“object呀!”我狼狈地问津着,“只是,……”我隐约情愫到了什么。

大李莞尔着说,“sender as object,就一语指明它的泉源与用途。object是撑腰 .NET 框架类层系结构中的所有类,并为派生类提供低级别服务。这是 .NET 框架中所有类的最终超类;它是类型层次结构的根。一般来说,sender在形参中发明引发事件的源流,就是我刚才所说的三要素中的‘对象’。如其在控件引发的事件中写代码的话,一般都不提供再重新指派,因而它已经觉得是该控件了。当自己写代码调用某事件程序时,就要写明sender是何物了。”

“也就是说,sender是提供给在事件处理程序代码内部或外部进展调用的吗?”我仍有点不明白。

“足以这样说,你难道看不出VB.NET提供给我们的是更通盘、更直接的克制吗?再说e,表示的是事件数据,就是一个事件激励所需要的状态信息。在事件引发时不向事件处理程序传送状态信息的事件会将e设为Eventargs。如果事件处理程序需要状态信息,则应用程序务必从该类派生一个类来封存数据。比如Mousedown事件,系统需要断定mouse的位置、判断是左中右哪个键点击了、判断点击了几下品等,因此该e就必需是System.Windows.Forms.MouseEventArgs类的范例。”大李进行解说着。

“哦,也就是说e是和事件密切相关的喽?”我开始用实际操作来证明一下,我在代码窗口的“类名”下拉列表中选择了Button1,在其右边的“诀要全名”下拉列表中选择了MosueDown法子,出现的就是Button1.MouseDown事件处理程序代码段:

Private Sub Button1_MouseDown(ByVal sender As Object,ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown

End Sub

果真,看到e的类型变为System.Windows.Forms.MouseEventArgs。我在代码段内写字e,然后在其后打一个点,出现了一个智能感知菜单(如图1所示):

与button1.click事件相比,button1.Mosuedown事件中的e的属性方法多出了伍个描述事件区别的属性,见表1所述。

Button

获取曾按下的是哪个鼠标按钮。

Clicks

获取按下并释放鼠标按钮的次数

Delta

获取鼠标轮已转动的制动器数的有记号计数。制动器是鼠标轮的一个凹口。

X

获取鼠标单击的 x 坐标。

Y

获取鼠标单击的 y 坐标。

表1 多出的e的属性

“我明白了,那么Handles主干字是否就是用来声明代码是要处理哪个事件的处理其中呢?”我终于开了点窍。

“是的,可不要小看Handles,好好利用它,你的程序会变得简洁和活络。”大李边说边给我写了一段代码

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) _

Handles Button1.Click,Button2.Click

Select Case sender.name

Case "Button1"

MsgBox("你点击的是button1")

Case "Button2"

MsgBox("你点击的是button2")

End Select

End Sub

“在Handles后面写了两个事件的声明,就可以在同一段代码中对两个对象进行占据。另外,利用Sender和e我们还可以更方便地构建与调用自己的事件处理程序。“大李边写边说。

“是吗?怎么实现?”我不由被推进出了浓浓的爱好。

(未完待续)

---------------------------------------------------------------

声明:白文版权与摘引权归韩睿所有,如需转载,请保留残缺的内容及此声明。

QQ: 18349592

E-Mail: henry7685@hotmail.com

请探望本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/


作者提交的简介:
... Delta 获取鼠标轮已转动的制动器数的有记号计数...... 大李推了推镜子,反诘我道:“你不必对Windows编程中的事件驱动程序设计很稔知吧?”(注:此处的Windows是指Win9X及其之上的操作类别) “是呀!”看来反问是大李授课的开篇词了,但我也...... 大李莞尔着说,“sender as object,就一语指明它的泉源与用途...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr