我正在研究一个非常古老的视觉基础项目。我必须重写项目的加载和保存功能。因此,我想创建一个控件数组,其中包含所有相关的文本框和复选框。我想遍历该数组,以便能够将数据保存到文本文件中或从中加载。
我已经在网上看到了如何定义这些数组,但它似乎并不适合我。也许我做错了什么,因为我不是Visual Basic的专家。
我试图让它以这种方式运作:
Dim tbList As TextBox = { Form1.Text1, Form1.Text3, _
Form1.Text10, Form1.Text11, Form1.Text12, Form1.Text13, _
Form2.Text1, Form2.Text3, Form2.Text4, Form2.Text5, _
Form2.Text10, Form2.Text11, Form2.Text12, Form2.Text13, _
Form3.Text1, Form3.Text3, Form3.Text4, Form3.Text5, _
Form3.Text10, Form3.Text11, Form3.Text12, Form3.Text13, _
Form3.Text17, Form3.Text18, Form3.Text19, Form3.Text20, _
Form4.Text1, _
Form5.Text1, Form5.Text2, Form5.Text3, _
Form6.Text2, _
Form7.Text2}
或列表:
Dim tbList As New List(Of Controls)
事情是Visual Basic总是告诉我有一些编译问题。在VB中没有真正解释这个问题,所以我在这里问。
答案 0 :(得分:1)
您的代码没有编译,因为它是vb.net代码。不用说(但我还是会说)vb6和vb.net并不是一回事。
如果要使用数组,则必须使用比文本框数少一个的数字标注数组(如果我计算正确,则示例中为32):
'// array is zero based so 0 to 31 = 32 items
Dim tbList(31) As TextBox
tbList(0) = Form1.Text1
tbList(1) = Form1.Text3
'//...I'll leave the rest as an exercise for the programmer
tbList(31) = Form7.Text2
Dim i As Integer
Dim tb As TextBox
'// To loop and work with each textbox
For i = 0 To UBound(tbList)
Set tb = tbList(i)
'// do something with tb
Next
然而,更简单的方法是使用集合:
Dim tbList As New Collection
tbList.Add Form1.Text1
tbList.Add Form1.Text3
'//...I'll leave the rest as an exercise for the programmer
tbList.Add Form7.Text2
Dim tb As TextBox
'// To loop and work with each textbox
For Each tb In tbList
'// do something with tb
Next
答案 1 :(得分:0)
是的,如果您想解决问题,可以使用集合。但更简单的方法是使用VB6(现已过时)控制数组实现。当我们发现它在.Net中不再可用时,我们大多数人都很失望!
在VB6中获取控件数组所需要做的就是创建一组具有相同名称的控件。 (它们必须是相同类型的控件;您不能制作文本框和组合框的数组。)从一个文本框开始,将其命名为您想要的,然后复制它。系统将询问您是否要创建控件数组。说是,复制任意多个。您会注意到Index属性不再是空白,从0开始并从那里开始递增。您还会注意到所有事件处理程序都有一个" Index As Integer"对他们的争论。这样,您可以对所有这些事件使用相同的事件处理程序,评估Index参数以找出数组的哪个成员正在触发事件。
Here是它的旧文档。微软很难找到。 :)