【问题标题】:Refering to a different control in each iteration of a loop在循环的每次迭代中引用不同的控件
【发布时间】:2015-04-29 02:56:40
【问题描述】:

在我的程序中,我有 24 个文本框供用户用于输入。我想将每个文本框的内容分配给数组的索引。有没有办法可以循环执行此操作而不必每次都输入strItems(0) = MainForm.txtEntry1.text?这是用 Visual Basic 编写的。

我正在尝试做的一个例子:

    For intCount = 0 to (strItems.length - 1)
      strItems(intCount) = txtEntry[intCount + 1]
    Next

【问题讨论】:

  • 并不是说您使用的控件集合是“容器的”集合。只有当所有控件都在表单表面上时,控件才会在 Me.Controls 中。正如 Kevin 所说,您可以使用名称后缀作为索引。 Tag 属性也可能有用。

标签: vb.net winforms


【解决方案1】:

如果您为所有文本框名称添加前缀(例如 textBoxArray1),则您可以遍历表单上的所有文本框并进行相应处理。喜欢:

Dim ctrl As Control

For Each ctrl In Me.Controls
   If (ctrl.GetType() Is GetType(TextBox)) Then
      If(ctrl.Name.StartsWith("textBoxArray") Then
          'your code here
      End If
   End If
Next

【讨论】:

  • 谢谢!肯定会让我的生活更轻松。
  • 你也可以说If TypeOf ctrl Is TextBox Then
  • 使用了你的两个建议。文本框在一个组框中,所以起初它不起作用。有没有办法用组框中的文本框做到这一点?
  • 你可以做For Each ctrl In MyGroupBox.Controls
【解决方案2】:

您可以使用 Linq 将控件放入数组中。

Dim Array() As TextBox = Me.Controls.OfType(Of TextBox)().Where(Function(c) c.Name.Contains("")).ToArray()
Array.Reverse(Array)

在你看到空引号的地方,就像@Kevin 说的那样,你可以给你的名字加上前缀,只找到那些文本框并填充它们,或者你可以像我一样把它留空,它会将表单上的每个文本框索引到数组。

然后你可以使用这样的东西来访问文本框

Dim i As Integer = 0
Array(i).Text = "Stuff"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2012-03-04
    • 2020-08-07
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多