VB .NET中控件数组的实现
- 格式:doc
- 大小:29.50 KB
- 文档页数:5
的数组列表(ArrayList)的数组列表(ArrayList)现在除了数组的长度计数是基于0开始的这个变化外,还引进了一个数组列表(ArrayList)对象来代替原来的集合(Collection)对象,集合对象的长度计数总是从1开始的,而且在需要的时候,数组列表的长度可以是不定的。
数组列表的基本的方法和集合一样,只不过它还具有一些新的功能方法。
例如:Dim Arl As ArrayList '构建一个数组列表For j=0 to 10Arl.Add(j)Next j所有的数组变量都有一个长度属性,这样就可以得知这个数组有多大:Dim Z(20) As SingleDim j As IntegerFor j=0 to z.Length-1Z(j)=jNext j在中所有的数组都是动态的,可以在任何时候重新定义数组的长度,然而,在中已经没有ReDim Preserve表述了,可以使用New关键字来对任何一个数组进行引用,并且重新定位:'在类模块级声明Dim X() As Single'重新定位X=New Single(20){}注意:数组类型后面的大括号不要忘记写。
和集合对象一样,数组列表含有一个“Count”属性和一个“Item”属性,允许使用“index”来访问数组列表中的元素。
而且,和集合对象一样,这个属性也可以省略,感觉就像操作数组一样:For i=0 to ar.Count-1Console.WriteLine(ar.Item(i))console.WriteLine(ar(i))Next i下表为数组列表的一些方法:注意:本部分讲座的数组是程序中声明的变量数组,不同于控件数组。
控件数组是在设计时通过设置控件的“Index”属性规定的,变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
一个数组中的所有元素具有相同的数据类型。
当然,当数据类型为“object”时,各个元素能够包含不同种类的数据(对象、字符串、数值等)。
巧用VB的控件数组
王萍
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2000(000)010
【摘要】控件是可视化开发工具的重要对象之一。
在程序设计时通常会遇到具有相同性质的事件过程,如果为每个控件分别编写一段事件过程,则显得十分不经济且结构不合理。
在面向对象的程序设计中可采用将多个相同的控件定义为一个控件数组,这个控件数组内的每一个控件都可以共享程序代码。
这不仅减少了开发人员重复性劳动而且提高了程序的可读性。
通常建立控件数组方法有两种:第一种是在设计阶段时建立,属于静态方式;另一种是在执行阶段,动态地建立控件数组,也即在程序执行时建立。
为了避免内存的浪费常采用动态建立控件数组,就是在程序模块(module)内,先声明一个空的控件数组,等到要使用该控件数组时,再重新声明要使用的控件数组元素或数目。
控件数组可以动态生成和释放;并且控件数组对属性具有相同控制。
动态生成和释放控件数组是在运行时,用Load和Unload语句添加和删除控件数组中的控件。
【总页数】2页(P18-19)
【作者】王萍
【作者单位】无
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.巧用VB控件数组、菜单数组及动态特性 [J], 李建;徐璧华;王林
2.VB中控件数组及其应用 [J], 胡绪英
3.VB控件数组在游戏中的应用 [J], 张春明
4.巧用VB控件数组实现地理信息查询 [J], 邹刚
5.VB中控件数组及其应用 [J], 胡绪英
因版权原因,仅展示原文概要,查看原文内容请购买。
VBA中的控件数组VBA中的控件数组2009年2月28日评论发表评论大家都知道,和VB不一样,VBA中不能直接创建控件数组。
然而可以使用WithEvents来模拟相同的功能。
我们需要一个类来处理控件的事件,而每一个控件需要一个类实例。
对于不同控件的类实例,我们可以使用一个对象数组或者集合来实现。
这里使用按钮控件做为例子来介绍怎样在窗体和工作表中创建控件数组。
创建类创建控件数组之前,我们需要一个类来处理控件的事件。
在VBE窗口中,单击菜单“插入”->“类模块”,在属性窗口中将类的名称改为“cCB”。
在类模块中添加下面这一行:Private WithEvents m_CB As mandButton这样你就可以从代码栏的顶部左边下拉列表中选择m_CB并选择右边下拉列表中相应的事件。
完整的代码如下:Private WithEvents m_CB As mandButton' 初始化,将控件绑定到类Public Sub Init(ctl As mandButton)Set m_CB = ctlEnd Sub' 控件的Click事件Private Sub m_CB_Click()MsgBox "你点击了:" & m_CB.CaptionEnd Sub' 注销类Private Sub Class_Terminate()Set m_CB = NothingEnd Sub窗体中的控件数组然后创建一个窗体,在窗体中添加两个CommandButton,将这两个按钮控件分别命名为cmd1和cmd2,然后在窗体中的初始化事件中添加代码如下:Private ctlCB(1 To 2) As cCB' 以对象数组保存类的实例Private Sub UserForm_Initialize()Set ctlCB(1) = New cCB' 将按钮cmd1赋给类的实例ctlCB(1).Init cmd1Set ctlCB(2) = New cCBctlCB(2).Init cmd2End Sub这里使用对象数组ctlCB(1 to 2)来保存类实例。
谈谈数组的使用我们都知道在所有程序设计语言中数组都是一个非常重要的概念,数组的作用是允许程序员用同一个名称来引用多个变量,因此采用数组索引来区分这些变量。
很多情况下利用数组索引来设置一个循环,这样就可以高效地处理复杂的情况,因此在很多情况下,使用数组可以缩短或者简化程序的代码。
本文主要介绍数组的使用,希望对大家的使用带来帮助。
数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界,其余的元素连续地分布在上下界之间,并且数组在内存中也是用连续的区域来存储的,所以要求声明数组每维的长度不能超过Long数据类型的最大值,即264—1=263。
我们把VB.NET数组当作一个对象来处理,这就意味着数组类型是单个引用类型,数组变量包含指向构成数组元素、数组维和数组长度等数据的指针,数组之间互相赋值其实只是在相互复制指针,而且数组继承了System名字空间的Array类。
VB.NET中提供的数组类型和VB 6.0中有一些差别,我们将在下面做详细的讲解。
(1)VB.NET数组的声明VB.NET中的数组有两种类型:定长数组和动态数组。
这里先介绍定长数组的几种不同的声明方式,不同的声明方法将导致数组不同的有效范围。
◆Dim语句在模块段建立模块级数组,例如:1.Dim arrayl(3)As Integer◆Public语句在模块的声明部分建立一个公共数组,例如:2.Public counttype(20)as string◆Static语句声明一个过程内的局部数组,例如:3.Public Sub Ipaddress()4.Static server(30)as string5.End SubVB.NET还提供了新的数组初始化语法,只需要简单的语句就可以完成数组的声明和初始化,例如:6.New array initialization syntax7.Dim arrayl As Integer()={2,4,8}在VB.NET中,为了和其他语言更加易于协同操作,数组的下标均设定为0,不允许声明一个下界为1的数组,因此Option Base语句不再被VB.NET支持,而且在声明一个数组时必须用它的元素个数,而不是它的上界来初始化,例如:8.//声明一个一维数组具有3个元素,下标从0~29.Dim arrayl(3)As Integer10.arrayl(0):211.arrayl(1)=412.arrayl(2)=8以上声明的数组有三个元素,下标从0到2,如果代码企图访问下标为3的数组元素,将引起运行错误。
第5章 数 组119 【程序】Option Base 1Private Sub Form_Click()Dim a(), i%, k%, m%a = Array(2, 4, 6, 8, 10, 12)Print "原始数据:2, 4, 6, 8, 10, 12"k = 4 'k代表删除的位置m=UBound(a) 'm代表原数组的下标上界For i = k+1 To ma(i-1) = a(i) '由a(m)到a(4),元素值依次向后移动一个位置Next iReDim Preserve a(m - 1) '重新定义a数组,使其大小减1Print "删除后数据:";For i = 1 To m - 1Print a(i);Next iEnd Sub5.6 控件数组5.6.1 控件数组的概念控件数组是一组具有相同名称和类型的控件。
它们的事件过程也相同。
通常用于对若干个控件执行大致相同的操作。
当建立控件数组的时候,系统给每个元素赋一个唯一的索引值(Index)或称下标值,第一个控件的下标值是0,第二个为1,依次类推,通过属性窗口的Index属性,不仅可以知道该控件的下标值是多少,也可以将该控件的下标值设为其他值。
控件数组中元素的引用同一般数组元素引用一样,可以通过数组名和括号中的下标来引用。
例如,Cmd(2)表示命令按钮控件数组的第3个元素。
一个控件数组至少应有一个元素,而同一控件数组中的元素可以有自己的属性设置值。
例如,图5-21 显示的是窗体上建一个有3个元素的Text1控件数组,在属性窗口下拉列表框中可见Text1控件数组3个元素的名称。
图5-21 控件数组与它们的名称5.6.2 控件数组的建立和应用控件数组的建立方法有在设计时创建和在运行时添加两种方式。
1.在设计时创建控件数组又有3种方法【方法1】将相同名字赋予多个同类型控件,其步骤如下。
第五章数组主要内容●数组的概念●静态数组及声明●动态数组及声明●数组的基本操作●控件数组●自定义数据类型●常用算法(二)●常见错误5.1 数组的概念1.引例若我们要求一个班100个学生的平均成绩,然后统计高于平均分的人数。
按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下:aver = 0For i = 1 To 100mark = Val(InputBox("输入第" & i & " 位学生的成绩"))aver = aver + markNext iaver = aver / 100但若要统计高于平均分的人数,则无法实现。
mark是一个简单变量,存放的是最后一个学生的成绩。
从已有知识解决方法:再重复输入成绩,逐一与平均分比较。
这样带来两个问题:(1)输入数据的工作量成倍增加;(2)若本次输入的成绩与上次不同,则统计的结果不正确。
解决此问题的根本方法是:始终保持输入的数据,一次输入,多次使用,为此必须引入有关数组的内容。
2.数组的概念数组并不是一种新的数据类型,而是一组相同类型的变量的集合。
数组必须先声明后使用。
在VB中有两类数组,一类是静态(定长)数组另一类称为动态(可变长)数组。
5.2 静态数组及声明在声明数组时就确定了数组元素的个数的数组称为静态数组。
定义格式: Dim 数组名(下标1[,下标2…]) [As 类型]数组维数:定义数组是用几个下标就表示数组是几维数组,最多60维。
定义数组是下标的形式为[下界 To ] 上界省略下界则系统默认下界为0,下界上界的值必须为数值常数或常数表达式(也可含逻辑常数或数值字符串)。
数组每一维大小:上界-下界+1。
数组元素的个数(或称大小):每一维大小的乘积[例]Dim mark(1 to 100) As Integer定义数组mark为一维整型数组,其下界为1,上界为100,大小为100(即mark有100个元素)。
1145.5 控 件 数 组如果在应用程序中用到一些同类、功能相似的控件,则可将这些控件视为一个数组——“控件数组”。
控件数组是由一组具有相同名称的同类控件组成,控件数组中的每一个控件共享同一个事件过程,在某些情况下会优化代码。
控件数组的名字由控件的Name属性指定,控件数组中的每个元素的下标由控件的Index属性指定,控件数组的第一个元素的下标默认为0,控件数组可用的最大Index值为32767。
5.5.1 控件数组的创建控件数组是针对控件创建的,因此与普通数组的定义不一样。
有三种方法创建控件数组。
方法一:将窗体上多个同类控件的“名称”属性设置为相同值,如窗体上有两个命令按钮Command1和Command2,将Command2的“名称”属性设置为Command1(默认为Command2)。
方法二:在窗体上先从工具箱中添加一个控件,然后用“复制”“粘贴”命令创建控件数组。
不管是利用方法一,还是方法二,系统都会出现一个对话框,询问“创建一个控件数组吗?”,单击“是”将创建一个控件数组。
方法三:用命令添加、删除控件数组的元素,该方法多用于程序设计中,使得在程序执行期间可以创建控件。
具体步骤如下。
(1)在窗体上创建一个控件,将其选中。
(2)将该控件的Index属性设置为0(默认值为空)。
这样就创建了一个控件数组,此时该控件数组中只有一个元素。
(3)在程序中使用下列格式的语句:Load控件数组名(索引值)动态地创建新的控件对象。
每个用Load语句添加的控件数组元素与原数组元素位置重合,必须通过Left和Top属性确定其在窗体上的位置,并将Visible属性值设置为True,否则添加的控件数组元素不可见。
Load语句只能添加已有的控件数组的元素,而不能创建控件数组。
在程序运行过程中,当用Load语句创建的某个控件数组元素不需要时,可使用Unload语句删除该控件数组元素,语句格式为:Unload控件数组名(索引值)小贴士Unload语句只能用来删除用Load语句添加的控件数组元素,不能用来删除设计时在窗体上创建的控件数组元素。
C#.NET中控件数组的实现王娜【摘要】在VB中使用控件数组非常灵活,同样在C#中也可以实现控件数组的功能.从三个方面说明C#如何完成控件数组的功能,即对多个控件赋值,多个控件使用同一个事件处理程序,在运行时动态添加或者删除控件.【期刊名称】《智能计算机与应用》【年(卷),期】2012(002)006【总页数】3页(P73-75)【关键词】C#;控件数组;事件响应;动态添加【作者】王娜【作者单位】华南师范大学增城学院计算机系,广州511363【正文语种】中文【中图分类】TP311.52C#以其强大的功能获得了越来越多的青睐,但是很多学习C#的程序员因为以前熟悉VB的经历,就会时常感觉C#的不方便,因为C#中没有设置控件数组,本文就针对此问题,对于如何在C#中实现数组控件做以探讨。
数组常用于保存一批相关的数据,而后借助循环,就可以很方便地访问数组中的每个元素。
而控件数组则是由一些相同类型的控件组成,控件数组的好处是可以使用相同的名称或索引访问一组控件,这样就不需为每个控件都编写一个事件处理程序,既节省了时间,也利于代码的重用。
下面分别比较VB中的控件数组和C#.NET中的控件数组。
1 VB中的控件数组在VB中,控件数组的生成主要是通过复制的方式,当复制产生一个控件时,VB 就会弹出提示,询问是否要生成控件数组。
如果确定需要使用控件数组,VB就会给这些控件设定相同的名字,控件之间用索引号(Index属性)加以区别。
控件数组中的控件允许有不同的属性设置,但却共享所有的事件。
控件数组的事件比普通控件的事件多配备一个Index参数,该参数用来表明是哪一个控件触发了事件。
下面的VB程序中就使用了控件数组,5个单选钮控件共享同一个Click事件,单选钮通过Index来区分,结果如图1所示,程序代码如下:2 C#中实现控件数组在C#中也可以实现控件数组,下面分别从多个控件赋值、多个控件使用同一个事件处理程序和运行时动态添加或者删除控件三个方面加以说明。
是一种流行的程序设计语言,它具有很强的可扩展性和灵活性。
本文将重点介绍如何使用编写一个函数来查找数组中的最大值。
一、定义函数在中,可以使用Function关键字定义一个函数。
函数定义通常包括函数名、参数列表和返回值类型。
下面是一个简单的函数定义的例子:```vbFunction FindMaxValue(ByVal arr() As Integer) As Integer' 函数体End Function```二、编写函数体函数体是函数的核心部分,它包括了函数的具体逻辑和操作。
对于查找数组中最大值的函数来说,我们可以使用一个循环来遍历数组,并使用一个变量来记录当前找到的最大值。
下面是一个完整的查找数组中最大值的函数实现:```vbFunction FindMaxValue(ByVal arr() As Integer) As IntegerDim maxValue As Integer = arr(0)For i As Integer = 1 To arr.Length - 1If arr(i) > maxValue ThenmaxValue = arr(i)End IfNextReturn maxValueEnd Function```三、调用函数在编写好函数之后,我们可以在其他地方调用这个函数来查找数组中的最大值。
调用函数时需要提供数组作为参数,并接收函数返回的最大值。
下面是一个简单的示例:```vbDim arr() As Integer = {3, 7, 2, 9, 5}Dim max As Integer = FindMaxValue(arr)Console.WriteLine("数组中的最大值为:" max)```四、完整示例下面是一个完整的程序,包括了定义函数、编写函数体和调用函数的过程:```vbModule Module1Function FindMaxValue(ByVal arr() As Integer) As Integer Dim maxValue As Integer = arr(0)For i As Integer = 1 To arr.Length - 1If arr(i) > maxValue ThenmaxValue = arr(i)End IfNextReturn maxValueEnd FunctionSub M本人n()Dim arr() As Integer = {3, 7, 2, 9, 5}Dim max As Integer = FindMaxValue(arr)Console.WriteLine("数组中的最大值为:" max)End SubEnd Module```五、总结通过以上示例,我们学习了如何使用编写一个函数来查找数组中的最大值。
VB.NET中控件数组的实现
摘要:VB编程时,当要处理一组相同类型的控件的同一事件过程时,我们可以
引入控件数组这一概念。如进行计算器程序编写时,可创建十个数字按钮的控件
数组,共享同一事件过程。VB6升级到VB.NET后,VB6控件数组的创建方法
在.NET中不可用,本文总结了几种VB.NET中使用控件数组的方法。
关键词:VB.NET控件数组事件过程程序代码
一、关于控件数组
熟悉VB6编程的,对控件数组这一概念应该非常熟悉,它是VB6中的一项简
单而非常实用的技术,是指具有相同名称的同类型的控件,共享同一事件。它的最
大好处是:简化编程。但当我们把这一用法沿用到VB.NET中来时,却发现无法实
现。虽然VB.NET中没有VB6中实现控件数组的方法,但在VB.NET中控件数组
的运用更加灵活了。
VB.NET中,控件数组的创建不再是在设计时简单地将同类型的各个控件的
Name属性值设置成同一名称就可以了,VB.NET中,不公能够创建同类型的相同
事件处理过程,还能够创建属于不同类型但共享相同事件的控件组。
二、VB.NET中控件数组的实现
要在VB.NET中实现控件数组这一机制,我们需要通过编写代码来完成,下面
来介绍几种的方法,大家可以根据程序的需要进行选择。
1、使用Handles子句。
先将控件数组中各控件对象依次添加到窗体,然后创建其中一个对象的事件
过程(执行部分先不写),再把其它对象的这一事件依次添加在后面,各事件过程名
之间用逗号分隔开来。在事件过程的执行部分,如果需要引用这些对象,则要先给
这些对象创建一个相同的名称。当要引用对象时,不再使用它们的Name属性值,
而是新创建的名称。示例代码如下(部分内容省略):
Label1_Click(ByVal sender…)Handles Label1.Click,Label2.Click,Label3.Click
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)
TextBox1.Text = sender.Text End Sub
然后指定在进行各个数字按钮单击时都能触发以上事件过程。在Windows
窗体设计器生成的创建每个按钮的New 方法下面依次添加如下代码:
AddHandler btn1.Click, AddressOf numclick
AddHandler btn2.Click, AddressOf numclick
AddHandler btn3.Click, AddressOf numclick
当进行数字按钮单击时,将执行相同的事件过程numclick中的代码。在本实
例中,因为都是要处理按钮的单击事件,所以在其单击事件中,可以通过sender.text
获取每个按钮中包含的文本。
控件数组中各控件对象,除了可以通过设计窗口来进行添加外,还可以通过编
写程序代码来创建添加,只是在创建以后需要设定各对象在窗体中的位置,如果所
要创建的对象数目较多,还需要进行排版。以上关于按钮的例子,创建按钮的示例
代码如下:
Private Sub Form1_Load(…)Handles MyBase.Load
Dim btn(3) As Button
Dim i As Short
For i = 0 To 3
If i = 0 Then
btn(0) = New Button
Me.Controls.Add(btn(0))
设置第一个按钮相关属性
Else
btn(i) = New Button
Me.Controls.Add(btn(i))
设置其它按钮相关属性
End If
使用AddHandler语句指定连接的事件处理过程
Next
End Sub
其中btn(3)表示控件数组,有四个对象,在For循环体中,先将对应按钮添加到
窗体,再通过指定其Top、Left属性值设置其在窗体中的位置,通过指定其Width
属性值设置其大小。
以上的实例中,没有对用户触发的是哪一个控件对象的事件处理程序进行区
分。如果要进行区分,则要在事件过程中使用Select Case条件语句,根据对象的Tag
或是TabIndex属性的值来进行判断。
3、通过创建类来实现控件数组。以下过程以创建一个Button类型控件数组
为例,不包含该控件数组使用的部分,具体创建步骤及代码如下:
1)为项目添加名为ButtonArray的类,该类继承
System.Collection.CollectionBase 类:
Public Class ButtonArray
Inherits System.Collections.CollectionBase
End Class
2)为组件建立私有、只读字段:
Private ReadOnly HostForm as System.Windows.Forms.Form
3)实现AddNewButton方法,通过此方法,实现按钮的动态添加:
Public Function AddNewButton() As System.Windows.Forms.Button
Dim aButton As New System.Windows.Forms.Button()
Me.List.Add(aButton)
HostForm.Controls.Add(aButton)
设置按钮相关属性
Return aButton
End Function
4)为ButtonArray类添加ParentForm属性,创建初始化函数(构造函数):
Public Sub New(ByVal host as System.Windows.Forms.Form)
HostForm = host
Me.AddNewButton()
End Sub
5)暴露控件数组:
Default Public ReadOnly Property Item(ByVal Index As Integer) As
System.Windows.Forms.Button
Get
Return CType(Me.List.Item(Index), System.Windows.Forms.Button)
End Get
End Property
6)实现Remove方法,通过此方法,实现按钮的动态删除:
Public Sub Remove()
If Me.Count > 0 Then
HostForm.Controls.Remove(Me(Me.Count -1))
Me.List.RemoveAt(Me.Count -1)
End If
End Sub
接下来是建立共享事件处理程序及将事件进行关联,此过程前面已经介绍
过。其他的控件数组也可以用类似的方式来实现
从上面的几种方法中能看出,在VB.NET要创建并使用控件数组,虽然麻烦很
多,有些甚至需要写大量代码,但其使用的灵活性也大大地加强了。学会在
VB.NET中灵活运用控件数组这一机制,能够提高编程效率,为我们节省大量时
间。
参考文献:
[1]张龙卿.《实例解析VB.NET应用编程》,北京希望电子出版社,2001
[2]罗朝盛、余文芳、余平,《Visual Basic 6.0程序设计教程》,人民邮电出版
社,2002
[3]《升级到Microsoft.NET→VisualBasic6.0控件和.NET控件的区别》
(2007-8-9)
[4]《VB.NET和C#.NET中控件数组的建立》(2009-4-24)