[VB.NET]在vb.net中有没有类似vb6控件数组的方法控制一组控件?

本文探讨了在VB.NET中如何使用控件数组简化多个同类控件的管理,特别是通过循环实现Label控件的批量赋值,介绍了创建控件数组并自动收集窗体内所有Label控件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VB.NET源码-156个实用实例哦…… <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
在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就不行了呢
__________________________________________________________________________
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值