Findcontrol using a non recursive approach
public static List<control> FindControls( Control controlTop )
{
List<control> list = new List<control>();
list.Add(controlTop);
for (int i = 0; i < list.Count; ++i)
{
list.AddRange(list[i].Controls);
}
return list;
}