见到我迷茫眼神大李用鼠标点击打开被region合起来“windows 窗体设计器生成代码”指着中间句自动生成代码:
friend withevents button1 as system.windows.forms.button
“当你在设计窗口往窗体上添加了个按钮后会自动在代码中加入这句代码friend 关键字授予对个或多个所声明编程元素友元访问权限那么withevent是干什么?”
我立刻在帮助中查找有了:
withevents 关键字指示被声明对象变量引用可以引发事件类例子
“明白了”我也不能总傻听着“在声明对象时候用withevents来进行标识再在事件处理中过程声明结尾处使用 handles 关键字将就可以处理由使用 withevents 关键字声明对象变量所引发事件了”
“没错你看来我写段代码使用就是withevent-handles思路方法来处理事件类名为chenry吧它内含个事件eventhr”
module module1
public chenry
public event eventhr ´ 声明个事件
sub causesomeevent
raiseevent eventhr ´ 引发事件
end sub
end
withevents obj as chenry ´模块或类级别声明
sub obj_eventhr handles obj.eventhr ´在handles的后声明事件
msgbox("事件处理器捕捉到了事件.") ´处理事件.
end sub
sub
obj.causesomeevent ´对象去引发事件
end sub
end module
“你要注意是如何样通过raiseevent来引发事件另外个很简单问题也需要注意是事件处理命名般是用‘对象名_事件名’方式”大李边写边指点说
“事件声明和引发是只能在个层次内还是可以在派生类里引发基类事件?”我不由好奇地问
“你开始学会研究了”大李不知道是不是在嘲笑我“vb.net要求必须在声明事件范围内引发事件派生类不能引发从基类继承事件但是可以处理基类引发事件我们可以来看个举例”大李马上对刚写代码进行了修改:
module module1
public chenry
public event eventhr ´ 声明个事件
sub causesomeevent
raiseevent eventhr ´ 引发事件
end sub
end
public 2 ‘从chenry派生而来类
inherits chenry
sub obj_eventhr handles mybase.eventhr
msgbox("事件处理器捕捉到了事件.") ´处理事件.
end sub
end
withevents obj as 2 ´模块或类级别声明
sub
obj.causesomeevent ´对象去引发事件
end sub
end module
“还记得我跟你说过mybase意义了吧?(注:详见构造和析构篇)我们可以添加 handles mybase.<event name> 语句来声明派生类中事件处理问个基本问题你看obj是2类个例子对吧?但为什么它也具有chenry类才有causesomeevent思路方法?”大李说得我眼球都快掉下来了
“当然是2是chenry类派生类继承了它思路方法呗”我神情极为沮丧
“哈哈别急呀在vb.net中我们最常碰到就是面向对象问题不断回顾有好处温故而知新!”大李最后微笑对我倒不啻为句忠告要学好vb.net我还真得好好复习下面向对象内容
大李话题转淡淡地跟我说:“withevents 语句和 handles 子句提供了标准陈述性指定事件处理思路方法也就是如何把对象事件和某个事件处理进行关联withevents 所声明对象引发事件可以由任何过程用命名此事件 handles 子句来处理换句话说有handles子句标识事件处理也只能处理由withevents声明对象虽然 handles 子句是关联事件和事件处理标准思路方法它仅限于在编译时关联事件和事件处理还有种思路方法可以允许在运行时动态地将事件和个或更多事件处理连接或者断开而并不要求使用 withevents 来声明对象变量”
“是吗?”我下子从沉思中惊醒过来好奇心又次袭来
最新评论