将每个X控件循环到一个表单中,即使它是嵌套的

问题描述 投票:0回答:1

在安装了Metroframework Modern UI 1.4.0.0的VB.NET项目中,我将这部分代码用于模块,以循环遍历MetroTextBox的所有MetroTabControles并将Cursor.Hand提供给其嵌入的Clear按钮。我怎么能做同样的事情,包括MetroTextBoxes,可能是MetroTabControl,我的形式或其他容器,例如?换句话说,我想将每个MetroTextBox循环到一个表单中,即使它是嵌套的。

Public Sub TxtBoxes_Cursors(sender, e)
    Dim _FormSender = DirectCast(sender, MetroFramework.Forms.MetroForm)
    For Each _MetroTabControl As Control In _FormSender.Controls.OfType(Of MetroFramework.Controls.MetroTabControl)()
        For Each _TabPage As Control In _MetroTabControl.Controls.OfType(Of MetroFramework.Controls.MetroTabPage)()
            For Each _Textbox As Control In _TabPage.Controls.OfType(Of MetroFramework.Controls.MetroTextBox)()
                If _Textbox.HasChildren Then
                    For Each _ClearButton As Control In _Textbox.Controls
                        If _ClearButton.Name = "lnkClear" Then
                            _ClearButton.Cursor = System.Windows.Forms.Cursors.Hand
                        End If
                    Next
                End If
            Next
        Next
    Next
End Sub
vb.net
1个回答
1
投票

根据用户this指出评论的A Friend相关问题的接受答案,这是我的问题的确切答案。首先,我必须把这个Function放入我的Module

Public Function FindControlRecursive(ByVal list As List(Of Control), ByVal parent As Control, ByVal ctrlType As System.Type) As List(Of Control)
    If parent Is Nothing Then Return list
    If parent.GetType Is ctrlType Then
        list.Add(parent)
    End If
    For Each child As Control In parent.Controls
        FindControlRecursive(list, child, ctrlType)
    Next
    Return list
End Function

然后像这样编辑我的Public Sub

Public Sub TxtBoxes_Cursors(sender, e)
    Dim _FormSender = DirectCast(sender, MetroFramework.Forms.MetroForm)
    Dim _MetroTextBoxes As New List(Of Control)
    For Each _Textbox As MetroFramework.Controls.MetroTextBox In FindControlRecursive(_MetroTextBoxes, _FormSender, GetType(MetroFramework.Controls.MetroTextBox))
        If _Textbox.HasChildren Then
            For Each _ClearButton As Control In _Textbox.Controls
                If _ClearButton.Name = "lnkClear" Then
                    _ClearButton.Cursor = System.Windows.Forms.Cursors.Hand
                End If
            Next
        End If
    Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.