2024年5月3日发(作者:)
中控件数组的实现
摘要:VB编程时,当要处理一组相同类型的控件的同一事件过程时,我们可以
引入控件数组这一概念。如进行计算器程序编写时,可创建十个数字按钮的控件
数组,共享同一事件过程。VB6升级到后,VB6控件数组的创建方法
在.NET中不可用,本文总结了几种中使用控件数组的方法。
关键词:控件数组事件过程程序代码
一、关于控件数组
熟悉VB6编程的,对控件数组这一概念应该非常熟悉,它是VB6中的一项简
单而非常实用的技术,是指具有相同名称的同类型的控件,共享同一事件。它的最
大好处是:简化编程。但当我们把这一用法沿用到中来时,却发现无法实
现。虽然中没有VB6中实现控件数组的方法,但在中控件数组
的运用更加灵活了。
中,控件数组的创建不再是在设计时简单地将同类型的各个控件的
Name属性值设置成同一名称就可以了,中,不公能够创建同类型的相同
事件处理过程,还能够创建属于不同类型但共享相同事件的控件组。
二、中控件数组的实现
要在中实现控件数组这一机制,我们需要通过编写代码来完成,下面
来介绍几种的方法,大家可以根据程序的需要进行选择。
1、使用Handles子句。
先将控件数组中各控件对象依次添加到窗体,然后创建其中一个对象的事件
过程(执行部分先不写),再把其它对象的这一事件依次添加在后面,各事件过程名
之间用逗号分隔开来。在事件过程的执行部分,如果需要引用这些对象,则要先给
这些对象创建一个相同的名称。当要引用对象时,不再使用它们的Name属性值,
而是新创建的名称。示例代码如下(部分内容省略):
Label1_Click(ByVal sender…)Handles ,,
Dim lbl As Label = CType(sender, Label)
当中,创建的是Label1的Click事件,在其后面,添加了Label2及Label3的Click
事件。事件过程中,通过一条Dim语句,定义三个标签具有相同的名称lbl,在下面
的代码中,要设置或获取其中某一个标签的某个属性值时,直接使用名称lbl即可。
这种方法实现起来最方便简单,以上实例中要求控件数组中控件类型相同,通过此
方法,也可实现不同类型同一事件处理程序的共享,如具有同一功能的菜单项和工
具栏中按钮。但当共享同一事件处理程序的控件数目较多时,使用此方法较麻烦。
2、使用AddHandler语句。
通过AddHandler语句连接到用户所定义的事件处理过程,但所建立的过程参
数必须和Click事件过程参数相同。如在窗体上有几个数字按钮,进行按钮单击时
能将数字显示在文本框中,可先建立事件处理过程,过程代码如下:
Private Sub numclick(ByVal sender As Object, ByVal e As EventArgs)
= End Sub
然后指定在进行各个数字按钮单击时都能触发以上事件过程。在Windows
窗体设计器生成的创建每个按钮的New 方法下面依次添加如下代码:
AddHandler , AddressOf numclick
AddHandler , AddressOf numclick
AddHandler , AddressOf numclick
当进行数字按钮单击时,将执行相同的事件过程numclick中的代码。在本实
例中,因为都是要处理按钮的单击事件,所以在其单击事件中,可以通过
获取每个按钮中包含的文本。
控件数组中各控件对象,除了可以通过设计窗口来进行添加外,还可以通过编
写程序代码来创建添加,只是在创建以后需要设定各对象在窗体中的位置,如果所
要创建的对象数目较多,还需要进行排版。以上关于按钮的例子,创建按钮的示例
代码如下:
Private Sub Form1_Load(…)Handles
Dim btn(3) As Button
Dim i As Short
For i = 0 To 3
If i = 0 Then
btn(0) = New Button
(btn(0))
设置第一个按钮相关属性
Else
btn(i) = New Button
(btn(i))
设置其它按钮相关属性
End If
使用AddHandler语句指定连接的事件处理过程
Next
End Sub
其中btn(3)表示控件数组,有四个对象,在For循环体中,先将对应按钮添加到
窗体,再通过指定其Top、Left属性值设置其在窗体中的位置,通过指定其Width
属性值设置其大小。
以上的实例中,没有对用户触发的是哪一个控件对象的事件处理程序进行区
分。如果要进行区分,则要在事件过程中使用Select Case条件语句,根据对象的Tag
或是TabIndex属性的值来进行判断。
3、通过创建类来实现控件数组。以下过程以创建一个Button类型控件数组
为例,不包含该控件数组使用的部分,具体创建步骤及代码如下:
1)为项目添加名为ButtonArray的类,该类继承
tionBase 类:
Public Class ButtonArray
Inherits tionBase
End Class
2)为组件建立私有、只读字段:
Private ReadOnly HostForm as
3)实现AddNewButton方法,通过此方法,实现按钮的动态添加:
Public Function AddNewButton() As
Dim aButton As New ()
(aButton)
(aButton)
设置按钮相关属性
Return aButton
End Function
4)为ButtonArray类添加ParentForm属性,创建初始化函数(构造函数):
Public Sub New(ByVal host as )
HostForm = host
Button()
End Sub
5)暴露控件数组:
Default Public ReadOnly Property Item(ByVal Index As Integer)
Get
Return CType((Index), )
End Get
End Property
6)实现Remove方法,通过此方法,实现按钮的动态删除:
Public Sub Remove()
If > 0 Then
(Me( -1))
As
At( -1)
End If
End Sub
接下来是建立共享事件处理程序及将事件进行关联,此过程前面已经介绍
过。其他的控件数组也可以用类似的方式来实现
从上面的几种方法中能看出,在要创建并使用控件数组,虽然麻烦很
多,有些甚至需要写大量代码,但其使用的灵活性也大大地加强了。学会在
中灵活运用控件数组这一机制,能够提高编程效率,为我们节省大量时
间。
参考文献:
[1]张龙卿.《实例解析应用编程》,北京希望电子出版社,2001
[2]罗朝盛、余文芳、余平,《Visual Basic 6.0程序设计教程》,人民邮电出版
社,2002
[3]《升级到→VisualBasic6.0控件和.NET控件的区别》
(2007-8-9)
[4]《和C#.NET中控件数组的建立》(2009-4-24)


发布评论