65.9K
CodeProject is changing. Read more.
Home

How to Display a Control's Hierarchy as a String

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (1 vote)

Feb 19, 2013

CPOL
viewsIcon

9484

Here's how to display a control's hierarchy as a string

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
  ''' <summary>
  ''' Find all of the control's parents' names and return a string of the complete hierarchy
  ''' </summary>
  ''' <param name="Control"><c><seealso cref="System.Windows.Forms.Control">Control</seealso></c> 
  ''' from which to display the hierarchy.</param>
  ''' <returns><c><seealso cref="String">String</seealso></c> of the parents' names.</returns>
  ''' <remarks></remarks>
  <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