教大家一个vb.net中使用控件数组的方法
很多人都说已经取消了控件数组这个好用的东西,互联网上提供了许多种替代方法,例如使用类。这些方法太过复杂,且对于新手来说难以理解。其实根本没有取消控件数组,只是使用的方式略有区别,而且和vb6相比更加简单和自由。
这里给出一个例子:
第一步,新建一个窗体,拉大一点,在代码中加入:
Dim L() As Label
Private Sub aaa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
CType(sender, Label).Text = CType(sender, Label).Tag
End Sub
第二步,画上一个按钮,在其click事件里加入如下代码:
Dim i As Integer
ReDim L(9)
For i = 0 To 9
L(i) = New Label
L(i).Location = New Point(0, 30 * i)
L(i).BackColor = Color.Aqua
L(i).Tag = i
L(i).Parent = Me
AddHandler L(i).Click, AddressOf aaa_Click
Next
大功告成!现在你运行这个程序,点一下按钮,就发现窗体左边出来一列label,而且你单击一个label,就会显示出相应的文字。
现在详细解释一下:
首先第一句,定义了一个label数组:Dim L() As Label L是数组的名字,L后面加上一个空括号,它就不再是一个特定的控件,而是控件数组了。谁还敢说取消了控件数组???!!!
button1_click事件中代码解释如下:
Dim i As Integer
ReDim L(9) 把L的大小定义为包含十个label,这只是定义了L的大小,它里面其实还没有包含真正的label
For i = 0 To 9
L(i) = New Label L(i)可以引用L中第i个label,这和vb6的用法一样,这里必须new一下,产生出一个真正的label放在L(i)的位置上,从这里开始,L里面就有了真正的label了。
L(i).Location = New Point(0, 30 * i) 定义新label的位置,.net里面定义位置可以直接使用location属性,具体不再赘述
L(i).BackColor = Color.Aqua 改一下颜色,否则看不出来
L(i).Tag = i tag属性是一个标记,你可以令其等于i,这样tag属性就表征了这个label在L中的位置,或者叫序号
L(i).Parent = Me 注意一定要这一句,把新label的容器定义为窗体,也就是把label放到窗体中了,除了me之外,你也可以把它们放到任何一个已经有的容器控件中,灵活把?
AddHandler L(i).Click, AddressOf aaa_Click 这一句是连接事件,把新label的click事件连接到aaa_click过程上,这样当你单击label的时候就会触发aaa_click中的代码。
Next
最后是aaa_click过程:
Private Sub aaa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
CType(sender, Label).Text = CType(sender, Label).Tag
End Sub
sender这个东西指的是发出信号的对象,其实就是你所点击到的那个label,但是sender的类型是object,所以你在代码里用ctype把它改成label类型,然后进行各项适用于label的操作,这里只有一句话,就是把label的名字设定成它的序号。
好了,这就是中使用控件数组的方法,特别简单吧?