// TODO: handle skipping non-focused components and circular changes private List<FocusableComponentDescriptor> GetFocusableComponents() { List<FocusableComponentDescriptor> list = new List<FocusableComponentDescriptor>(); ITabManagerClient fmc = _component as ITabManagerClient; if (null == fmc) return list; _components = TabChildren ?? fmc.GetTabChildren(); int index = 0; _components.ForEach(delegate(DisplayListMember child) { InteractiveComponent comp = child as InteractiveComponent; // form item if (FocusManager.IsFocusCandidate(comp)) // visible & enabled & focus enabled? list.Add(new FocusableComponentDescriptor(index, comp)); index++; }); return list; }