public VaultDialogForm(VaultAction action) { // Initialize internal state Action = action; SelectedVault = null; // Initialize controls and events InitializeComponent(); _tcTabs.Selected += (o, e) => { var virtualTab = e.TabPage.Tag.AssertCast <IVaultDialogTab>(); this.Text = virtualTab.FullTitle; if (TabActivated != null) { TabActivated(o, new VaultDialogTabEventArgs(virtualTab)); } }; _tcTabs.Deselected += (o, e) => { var virtualTab = e.TabPage.Tag.AssertCast <IVaultDialogTab>(); if (TabDeactivated != null) { TabDeactivated(o, new VaultDialogTabEventArgs(virtualTab)); } }; // Load plugins var lastSelectedTabType = (Type)AppDomain.CurrentDomain.GetData(this.GetType().FullName); lastSelectedTabType = lastSelectedTabType ?? VaultFormats.Default.GetType(); TabPage tabToSelectNow = null; var map = new Dictionary <TabPage, IVaultFormat>(); foreach (var format in VaultFormats.All) { format.InjectIntoVaultDialog(this); var tab = _tcTabs.TabPages.Cast <TabPage>().Last(); map.Add(tab, format); if (format.GetType() == lastSelectedTabType) { tabToSelectNow = tab; } } // Select previously selected page (or a default format) tabToSelectNow.AssertNotNull(); if (tabToSelectNow != null) { if (tabToSelectNow == _tcTabs.TabPages.Cast <TabPage>().First()) { // the target tab is already selected, but we need to raise our events if (TabActivated != null) { TabActivated(this, new VaultDialogTabEventArgs(Tabs.First())); } } else { _tcTabs.SelectedTab = tabToSelectNow; } } // Remember tab selections this.TabActivated += (o, e) => { var tabType = map[e.Tab.TabPage].GetType(); AppDomain.CurrentDomain.SetData(this.GetType().FullName, tabType); }; }