Vb.net 循环另一个类中的控件

Vb.net 循环另一个类中的控件,vb.net,winforms,oop,Vb.net,Winforms,Oop,我创建了一个包含两个DataGridView的表单,两个包含随机文本的文本框,以及两个包含随机文本的组合框 我创建了两个类。DataGridViewForm和DataGridViewClass Property Wissen() As Control Get Return ControlName End Get Set(value As Control) ControlName = valu

我创建了一个包含两个DataGridView的表单,两个包含随机文本的文本框,以及两个包含随机文本的组合框

我创建了两个类。DataGridViewForm和DataGridViewClass

    Property Wissen() As Control
        Get
            Return ControlName
        End Get
        Set(value As Control)
            ControlName = value
            If TypeOf ControlName Is TextBox Then
                ControlName.Text = Nothing
            ElseIf TypeOf ControlName Is ComboBox
                ControlName.Text = String.Empty
            End If
        End Set
    End Property
我在DataGridViewForm上的控件上循环以清除这些控件

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' Pressing this button will clear all text and comboboxes
        Dim button As New DataGridViewClass()

        Dim a As Control = Nothing
        For Each a In Me.Controls
            button.Wissen = a
        Next            
    End Sub
它是DataGridViewClass

    Property Wissen() As Control
        Get
            Return ControlName
        End Get
        Set(value As Control)
            ControlName = value
            If TypeOf ControlName Is TextBox Then
                ControlName.Text = Nothing
            ElseIf TypeOf ControlName Is ComboBox
                ControlName.Text = String.Empty
            End If
        End Set
    End Property
这很好,但我想将循环从dgvFrom移动到dgvClass。我该怎么做?如果移动该循环,则会出现错误“Controls不是DataGridViewClass的成员”

好吧,根据我的建议,我试过:

        ControlName = value
        Dim a As Control
        For Each a In ControlName.Controls
            If TypeOf a Is TextBox Then
                a.Text = Nothing
            ElseIf TypeOf a Is ComboBox
                a.Text = String.Empty
            End If
        Next
在DataGridViewForm中,我将

Dim button As New DataGridViewClass()

button.Wissen = Me

这管用!现在我可以对其他表单使用相同的清除按钮。谢谢

DataGridViewForm的控件不是静态的,您需要将
DataGridViewForm
的实例传递给
DataGridViewClass
的实例,然后
DataGridViewClass
将可以访问
DataGridViewForm
的所有控件,下面是一个基本示例:

Public Class DataGridViewForm

    Private DgvClassObj As DataGridViewClass
    Sub New()
        ' pass this DataGridViewForm instance (Me) to an instance of DataGridViewClass
        Init()
    End Sub

    Private Sub Init()
        DgvClassObj = New DataGridViewClass(Me)
        DgvClassObj.SomeMethodToLoopOverDataGridViewFormControls()
    End Sub

End Class


Class DataGridViewClass

    Private DgFormObj As DataGridViewForm
    Sub New(ByRef dgform As DataGridViewForm)
        Me.DgFormObj = dgform
    End Sub

    Public Sub SomeMethodToLoopOverDataGridViewFormControls()

        For Each c As Control In DgFormObj.Controls
            ' now you can loop over the instance of your DataGridViewForm class
        Next

    End Sub

End Class

DataGridViewClass类需要对DataGridViewForm的引用,然后您可以从DataGridViewClass内部执行form.Controls。是的,我正在寻找类似的内容。但是,也会有其他表单具有相同的按钮和相同的功能。因此表单应该在变量中将其名称传递给类。不是名称,而是类的实例作为对象。。。如果该答案回答了您的问题,请将其标记为答案。