Selecting form controls that are either inside or outside a rectangle
You can make things more concise with LINQ.  Here's one way that should work:

List&lt;Control&gt; getControls(Control container, Rectangle rect, bool bContained = false)
{
    rect = RectangleToClient(rect);
    return (from Control ctl in container.Controls
                  where rect.IntersectsWith(ctl.Bounds) == bContained                     
                  select new List&lt;Control&gt; { ctl }.Union(ctl.Controls.OfType&lt;Control&gt;()))
                  .SelectMany(x =&gt; x).ToList();
}


This basically does the same thing, filters the collection according to bContained.  Creates a collection of  lists that each contain the parent control and its sub-controls.  Then flattens them into one list.