
在vb.net中有没有类似vb6控件数组的方法控制一组控件?
我一个窗口有15个label,名字分别为lab1~lab15,现在要赋值给它们,如果用:
lab1.text = xxx
lab2.text = xxx
lab3.text = xxx
...
...
要累死我了,想用循环来实现,有啥好办法?
谢谢!
__________________________________________________________________________
Dim lab() As Label = {lab1, lab2, lab3}
然后就可以用了。
__________________________________________________________________________
那也要写lab1到lab15吧,我有很多这样的窗口,最多的label控件有24个,这样写还是太麻烦了。
__________________________________________________________________________
15个label的赋值有规律还可以用循环,内容不同是不是还是需要一个一个赋值呀?
__________________________________________________________________________
就在定义的时候写一次就好了啊。
__________________________________________________________________________
就是有规律才这样想啊,想一个方法可以套用在所有窗口上,不然一个个写太费神了
__________________________________________________________________________
因为我要赋的值即等号右边可以用数组,所以我想控件也用数组,这样一个for循环就解决了...
__________________________________________________________________________
这样可以么?
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim lab() As Label = {lab1, lab2, lab3}
Dim v() As Integer = {1, 20, 300}
For i As Integer = 0 To lab.GetUpperBound(0)
lab(i).Text = v(i)
Next
End Sub
End Class
__________________________________________________________________________
就是这个意思,不过对于Dim lab() As Label = {lab1, lab2, lab3}
的写法还是觉得太烦琐了,想一个方法能自动添加一个窗口中的所有label控件到一个数组中,这样把这些做成一个函数,我就可以用在所有的窗体中了,而且只需要一条语句。
我只是这样希望而已,不知道能不能实现了
__________________________________________________________________________
Public Class Form1
Private Function GetLables() As Label()
GetLables = Nothing
Dim i As Integer = 0
For Each ctrl As Control In Me.Controls '' 遍历窗体上的控件
'' 如果控件类型为Lable,名字中有 "lab "就加入到数组中
If TypeOf ctrl Is Label And ctrl.Name.Contains( "lab ") Then
i = Integer.Parse(ctrl.Name.Substring(3)) '' 取本来的编号,使其顺序一致
GetLables(i) = ctrl
End If
Next
End Function
End Class
__________________________________________________________________________
好像不对,
GetLables(i) = ctrl
这一句会导致不能遍历控件,不知道为什么.
__________________________________________________________________________
我以前用过这种代码的,不记得有问题啊。请高手指点。
__________________________________________________________________________
我用了arraylist来存放“遍历窗体上的控件”里找到的label控件,
dim al as ArrayList
al.add(lab) ''lab为找到的控件对象
al(1).text = xxx
以上可以赋值,不过al这个集合里label都是乱序的,就是说al(1)并不是原来的label1控件,可能是label5控件。
怎么让它们按照label的名字进行排序呢?
__________________________________________________________________________
如果排序问题结局,所有的问题都解决了。
急等~~~
-_-!!
__________________________________________________________________________
用magicbacon(Cannot help coding)提供的代码中的:
i = Integer.Parse(ctrl.Name.Substring(3)) '' 取本来的编号,使其顺序一致
GetLables(i) = ctrl
这个思路稍作修改就可以了,我已经解决了,谢谢!
__________________________________________________________________________
i = Integer.Parse(lab.Name.Substring(3)) '' 取本来的编号,使其顺序一致
al.Insert(i, lab)
代替
al.add(lab)
试试.
__________________________________________________________________________
我又慢了.
__________________________________________________________________________
我是马后炮大王.
__________________________________________________________________________
呵呵,我已经试过al.Insert(i, lab)是不行的,会报告说越界了。
其实就是用数组啦,arraylist我不用了。
谢谢。
__________________________________________________________________________
晕,那是怎么搞的,我改了半天了。
__________________________________________________________________________
i = CInt(lab.Name.Substring(3)) '' 如果label的名字为labXXX,(XXX表示数字)
al(i) = lab ''al 声明为数组就可以了
__________________________________________________________________________
我晕
__________________________________________________________________________
为什么label换成textbox就不行了呢
__________________________________________________________________________