如何在 Visual Basic 6.0 中创建带有文本框的数组

How to create an array with textboxes in Visual Basic 6.0

我正在从事一个非常古老的 Visual Basic 项目。我必须重写项目的加载和保存功能。因此,我想创建一个包含所有相关文本框和复选框的控件数组。我想遍历该数组以便能够将数据保存到文本文件中或从中加载。

我在 Internet 上查看了如何定义这些数组,但它似乎对我不起作用。也许我做错了什么,因为我不是 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中没有对这个问题的真正解释,所以我在这里问。

您的代码未编译,因为它是 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

是的,如果你想麻烦的话可以使用集合。但使用它的更简单方法是使用 VB6(现已过时)的控件数组实现。当我们发现它在 .Net 中不再可用时,我们中的大多数人都很失望!

要在 VB6 中获取控件数组,您只需创建一组同名控件即可。 (它们必须是同一类型的控件;您不能制作数组,比方说,文本框和组合框。)从一个文本框开始,随意命名,然后复制它。系统将询问您是否要创建控件数组。说是,复制多少就复制多少。您会注意到索引 属性 不再为空,从 0 开始并从那里递增。您还会注意到所有事件处理程序都有一个 "Index As Integer" 参数。这样,您可以对所有这些事件使用相同的事件处理程序,评估 Index 参数以找出数组中的哪个成员正在触发事件。

Here 是它的旧文档。微软很难找到。 :)