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)