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

Posted

技术标签:

【中文标题】如何在 Visual Basic 6.0 中创建带有文本框的数组【英文标题】:How to create an array with textboxes in Visual Basic 6.0 【发布时间】:2015-05-22 21:02:27 【问题描述】:

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

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

【问题讨论】:

【参考方案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

【讨论】:

【参考方案2】:

是的,如果您想解决问题,可以使用集合。但是使用它的更简单的方法是使用 VB6(现在已过时)的控制数组实现。当我们发现 .Net 中不再提供它时,我们大多数人都感到失望!

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

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

【讨论】:

以上是关于如何在 Visual Basic 6.0 中创建带有文本框的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在Visual Basic 6.0中使用主键在一个表中使用外键获取记录

如何使用Visual Basic 6.0将LPT1更改为LPT2?

如何在 MySQL 中创建带重音的索引

如何在 QOpenGLTexture 中创建带 alpha 的纹理?

如何在 django 中创建带参数的链接

我将如何防止用户进入数据库中不存在的记录(使用 Microsoft DAO 2.5/3.51 的 Visual basic 6.0)