Recursive Page.FindControl for VB.Net with Generics

This makes life much easier when you are trying to get to controls that are themselves contained within other containers, for example a TextBox inside a DataView or DataList.

Public Function FindControlRecursive(Of ItemType)(ByVal Ctrl As Object, ByVal id As String) As ItemType

    If String.Compare(Ctrl.ID, id, StringComparison.OrdinalIgnoreCase) = 0 _
        AndAlso TypeOf Ctrl Is ItemType Then
        Return CType(Ctrl, ItemType)
    End If

    For Each c As Control In Ctrl.Controls
        Dim t As ItemType = FindControlRecursive(Of ItemType)(c, id)
        If t IsNot Nothing Then
            Return t
        End If
    Next

    Return Nothing

End Function

This example also demonstrates the use of generics, which before .NET 2.0 was only available with cast typing and the use of base objects.