You have an error there, unless you wanted to include all child controls regardless of whether they're contained. It should be: if (rect.IntersectsWith(ctl.Bounds)) { Selected.Add(ctl); Selected.AddRange(ctl.Controls); } As for the test, instead of two cases you can use: if(rect.IntersectsWith(ctl.Bounds) == bContained)