vb.net事件声明的简单介绍( 二 )


Controls.Add(progidasString,NameasString);
progid:ActiveX部件的ProgID,如:"VB.CheckBox";
Name:ActiveX部件加载后的名称,如:"MyCheckBox";
若要在窗体上添加一个名为MyButton的按钮,可以使用:
dimoControlasObject'窗体级变量
注意:这里声明为Object对象类型
PrivateSubLoadControl()
SetoControl=Controls.Add
("VB.CommandButton","MyButton")
oControl.Left=10
oControl.Top=10
oControl.Visible=True'使控件可见
EndSub
----这是VB6.0的标准语法 , 它在例程中也是如此演示的,不过该方法虽然现实了控件
的动态加载,按钮显示在窗体上,可以象普通按钮一样按下去,但加载的控件不能预先
设计响应事件代码,如:事件SubMyButton_Click()将是非法的,当然,可以将要响应
的事件封装在控件内部 。就编程的观点来看该方法没什么大的用处,开发ActiveX控件
的目的是为了资源共享,为了被其vb.net事件声明他开发人员利用 , 所以要提供必要的事件接口,显然
利用该方法不行,通过分析VBControls等相关对象 , 找出VBControlExtender对象与
EventInfo相结合能提供事件陷井捕捉,VBControlExtender对象对动态添加控件特别有
用 , 它提供了一套通用的属性、方法、事件给开发人员,它的一个突出特点是能编程设
计控件的事件,熟习类编程的朋友对带事件的对象声明一定不会陌生:
----DimWithEventsobjElemtasCElemtVBControlExtender也不例外,声明的语法
一样,只不过它有个特殊的事件ObjectEvent(InfoAsEventInfo) , 它能捕捉到对象使
用RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数和参
数的值 。VBControlExtender和EventInfo相结合,采用SelectCase就可以预先将不
同类对象的事件放置一起,各自独立运作 。将上面的代码改写一下就能提供Click事件
了:
----DimWithEventsoControlAsVBControlExtender'带事件声明声明之后您就可
以在代码窗口的左上角的对象下拉框中发现该对象出现了,也就是说,该对象有了事件
或方法了,它的事件有DragDrop,DragOver,LostFocus,GotFocus,ObjectEvent
和Validate,其中ObjectEvent是通用的事件捕捉 。
PrivateSubLoadControl()
SetoControl=Controls.Add
("VB.CommandButton","MyButton")
oControl.Visible=True
EndSub
PrivateSuboControl_ObjectEvent(InfoAsEventInfo)
SelectCaseInfo.Name
Case"Click"'Click事件
'您可以添加处理Click事件代码
MsgBox"您按了MyButton!"
CaseElse'其vb.net事件声明他事件
'Handleunknowneventshere.
EndSelect
EndSub
----当然对微软提供的标准控件能采用该方法添加,大家都不会怀疑,但自己开发的
控件也能吗vb.net事件声明?答案是肯定的,我们可以用一个实际的例子进行说明 。
vb.net:声明事件和引用事件分别用的什么语句声明事件只需用
private event 事件名称(参数表)
在通用部分声明
引用这个词不太恰当,应该说是触发
在需要触发的地方用
raiseevent 事件名称(参数表)就可以了
vb.net引发事件的问题,RaiseEvent在代码vb.net事件声明的开头:
用WithEvents声明类vb.net事件声明 , 比如 Private WithEvents变量名 As New 类名
用Handles邦定事件vb.net事件声明 , 比如Private Sub 过程名() Handles 变量.事件名
最后引发事件就相当于执行定义好的一个绑定过程
如何在 vb.net 为动态生成的控件添加事件并传递数据'把图片的声明放在外面 , 类里面过程外面,而且要用As,不然等会儿没法用

推荐阅读