So, based on what you want to do, I think the only way you could avoid iterating the entire form components collection, is by iterating over the culture specific resources and applying them to the controls. This should be a smaller set since only the subset of controls on the form would have values that need to change. It would look something like this:
var enumerator = mgr.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true).GetEnumerator();
while (enumerator.MoveNext())
{
var current = enumerator.Entry;
var objName = current.Key.ToString().Split('.')[0];
var item = this.GetType().GetField( objName, BindingFlags.NonPublic | BindingFlags.Instance );
if (item != null)
{
mgr.ApplyResources(item.GetValue(this), objName);
}
}
Notice that rather than iterating over the forms control collection, this is iterating over the keys in the resource file, using reflection to find the component on the form and applying resources only to those components that have settings in the file.
This is only a sample and I think it's rather brittle (i.e. nested gridview components that do not have a corresponding field on the form. Names that have multiple "." levels in a resource file, etc.) but it should be enough to get you started, I hope!