public void TopLevelForm_Load(object sender, EventArgs e) { Form f = (Form) sender; VisualTabOrderManager tom = new VisualTabOrderManager(f); //// Add an override for everything with a tab scheme set EXCEPT for the form, which //// serves as the root of the whole process. VisualTabOrderManager.TabScheme formScheme = VisualTabOrderManager.TabScheme.None; IDictionaryEnumerator extendeeEnumerator = extendees.GetEnumerator(); while (extendeeEnumerator.MoveNext()) { Control c = (Control) extendeeEnumerator.Key; VisualTabOrderManager.TabScheme scheme = (VisualTabOrderManager.TabScheme) extendeeEnumerator.Value; if (c == f) { formScheme = scheme; } else { tom.SetSchemeForControl(c, scheme); } } tom.SetTabOrder(formScheme); }
/// <summary> /// Set the tab scheme to use on a given control /// </summary> /// <param name="c"></param> public void SetTabScheme(Control c, VisualTabOrderManager.TabScheme val) { if (val != VisualTabOrderManager.TabScheme.None) { extendees[c] = val; if (topLevelForm == null) { if (c.TopLevelControl != null) { //' We're in luck. //' This is the form, or this control knows about it, so take the opportunity to grab it and wire up to its Load event. topLevelForm = (Form) c.TopLevelControl; HookFormLoad(); } else { //' Set up to wait around until this control or one of its ancestors is added to the form's control hierarchy. HookParentChangedEvents(c); } } } else if (extendees.Contains(c)) { extendees.Remove(c); //' If we no longer have any extendees, we don't need to be wired up to the form load event. if (extendees.Count == 0) { UnhookFormLoad(); } } }