分享
 
 
 

Henry的VB.NET之旅(十二)—事件驱动

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有