Vb.net 如何在循环中处理以编程方式创建的工具的事件

Vb.net 如何在循环中处理以编程方式创建的工具的事件,vb.net,loops,dynamic,datagridview,Vb.net,Loops,Dynamic,Datagridview,我正在创建一个表单生成器,它创建多个选项卡,并在每个选项卡上放置一个DataGridView,链接到数据集数组中的数据集: For Each table As DataTable In datasetInput(i).Tables If arr_tables(i)(j).Equals(table.TableName) Then tablename = table.TableName Dim grid As New DataGridView

我正在创建一个表单生成器,它创建多个选项卡,并在每个选项卡上放置一个DataGridView,链接到数据集数组中的数据集:

For Each table As DataTable In datasetInput(i).Tables
    If arr_tables(i)(j).Equals(table.TableName) Then
        tablename = table.TableName
        Dim grid As New DataGridView
        grid.DataSource = table
        grid.Name = j
        grid.Location = place
        grid.Size = New System.Drawing.Size(734, 150)
        TabPage.TabPages(i).Controls.Add(grid)
    End If
Next
请注意,此循环嵌套在处理表单上每个选项卡的另一个循环中。arr_tables是一个交错数组,它处理我想要的数据集中的哪些表,因为我不想将每个数据表都拉入DGV

现在我需要做的是格式化任何落在“等式”列中的单元格。对于“等式”列中的所有单元格,我希望是一个具有几个不同选项的下拉单元格。其次,如何处理单元格单击事件?假设列名称“Input”中的任何单元格我想提供一个MessageBox

通常,如果DataGridView不是在循环中创建的,那么我在做这些事情时不会有问题。但是因为它们是在代码中丢失的,我不知道如何引用它们

谢谢大家!

试试这个:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    For Each table As DataTable In datasetInput(i).Tables
        If arr_tables(i)(j).Equals(table.TableName) Then
            tablename = table.TableName
            Dim grid As New DataGridView
            grid.DataSource = table
            grid.Name = j
            grid.Location = place
            grid.Size = New System.Drawing.Size(734, 150)
            TabPage.TabPages(i).Controls.Add(grid)

            AddHandler grid.SelectionChanged, AddressOf grid_SelectionChanged

        End If
    Next

End Sub

Private Sub grid_SelectionChanged(sender As Object, e As EventArgs)
    ' your code
End Sub

他们没有迷路。您可以将它们放在TabPages的控件集合中,在那里可以找到它们。在“丢失”对象变量之前,可以使用
AddHandler将事件连接到
grid`对象变量。ohhh。所以我可以在循环中为每个网格创建处理程序?德普,我现在不觉得自己很愚蠢。谢谢也许我误解了什么,但如果您将名称更改为'grid.Name=“dgw”&j'(我认为名称不能以数字开头),那么您应该在放置它们的位置找到它们,以及它们的名称,即dgw1、dgw2、dgw3,。。。在TabPage.Tabpages(i).控件中。