如何在VB .NET中创建控件数组

vij*_*jay 9 vb.net vb6

在VB6中有一个名为Control Arrays的功能,您可以在其中为控件命名相同的名称并为其提供索引值.这允许您通过循环控件和设置每个值来设置值.在VB .NET中我无法创建控件数组,有人可以为我提供类似的解决方案.

dwi*_*del 13

以下是我为其他内容编写的示例,该示例演示了如何执行类似操作并显示如何执行处理程序.这使得10x10网格的按钮在您单击时变为红色.

Dim IsCreated(99) As Boolean
Dim Buttons As New Dictionary(Of String, Button)

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    For i As Integer = 0 To 99
        Dim B As New Button
        Me.Controls.Add(B)
        B.Height = 30
        B.Width = 40
        B.Left = (i Mod 10) * 41
        B.Top = (i \ 10) * 31
        B.Text = Chr((i \ 10) + Asc("A")) & i Mod 10 + 1
        Buttons.Add(B.Text, B)
        B.Tag = i
        AddHandler B.Click, AddressOf Button_Click
    Next


End Sub

Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim B As Button = sender
    IsCreated(B.Tag) = True
    B.BackColor = Color.Red
End Sub
Run Code Online (Sandbox Code Playgroud)

  • +1,因为您展示了如何在运行时创建控件,并将共享事件处理程序与所有控件相关联.这些可能是人们从VB6转换的功能最多. (2认同)

Han*_*ant 8

避免使用建议的迭代方法,除非您的表单非常简单,否则您将获得相当随机的控件集合.只需在代码中声明控件数组并在表单构造函数中初始化它.像这样:

Public Class Form1
    Private OrderNumbers() As TextBox

    Public Sub New()
        InitializeComponent()
        OrderNumbers = New TextBox() {TextBox1, TextBox2}
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

您现在可以像在VB6中一样处理OrderNumbers.


Dan*_*ite 1

使用 Winforms,您可以这样做:

myForm.Controls _
  .OfType(Of TextBox) _
  .OrderBy(Function(c) c.Name) _
  .Where(Function(c) c.Name.StartsWith("somePrefix")) _
  .ToArray()
Run Code Online (Sandbox Code Playgroud)

在您的表单上,您可以命名您的文本框somePrefix1somePrefix2等等。

这是一篇文章,但它可以为您提供更多信息。最上面的方法非常简单。