I created an extension method that allows my program to find all of a control's parents' names. It returns a string
separated overrideable delimiter (::). This code is targeted for .NET 4 Client, but should also work in .NET 3.5.
Module WinformControlExtensions
<System.Runtime.CompilerServices.Extension()>
Public Function ToControlHierarchy(ByRef Control As Control, _
Optional ByVal Separator As String = "::") As String
Dim oStack As New Stack()
Dim oParent As Control = Control.Parent
oStack.Push(Control.Name)
Do Until IsNothing(oParent)
oStack.Push(oParent.Name)
oParent = oParent.Parent
Loop
Dim sFullName As String = String.Empty
Do While oStack.Count > 0
sFullName &= oStack.Pop() & Separator
Loop
Return sFullName.Substring(0, sFullName.Length - Separator.Length)
End Function
End Module
An example usage:
Dim oList As List(Of Control) = Me.FindAllChildren()
Dim oControl As Control
For Each oControl In oList
Console.WriteLine(oControl.ToControlHierarchy("!"))
Next