Windowsフォーム上のすべてのコントロールを列挙するには?(非再帰版)


Windowsフォーム上のすべてのコントロールを列挙するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html


に自己再帰の例があったので、非再帰版を書いておくです。

(あ、別に全てのコントロールをどうこうしたいワケじゃないので悪しからず;)



末尾再帰最適化しない処理系(してくれるの殆どない)では、自己再帰書くと簡単にスタックオーバーフローできますよね?


といいますか、ただのn分木探索の例として。。


' List lに詰め込む例

Dim c As Control = Me
Dim l As New List(Of Control)
Dim i As Integer = 0
l.Add(c)
While i < l.Count
	For Each c1 As Control In l(i).Controls
		l.Add(c1)
	Next
	i += 1
End While
' 単にトラバースするだけ例

Dim c As Control = Me
Dim l As New LinkedList(Of Control)
l.AddFirst(c)
While 0 < l.Count
	For Each c1 As Control In l.First.Value.Controls
		Debug.Print(c1.Name)
		l.AddLast(c1)
	Next
	l.RemoveFirst()
End While


えーと、2コ目がLinkedListな理由は分かりますよね?