public static void RestoreWindowState(Form Frm) { try { //Global_GUI.InvokeIFRequired(Frm, () => //{ Point SavLocation = (Point)(Global.GetRegSetting(Frm.Name + "_Location", new Point())); //Frm.RestoreBounds.Location if (SavLocation.IsEmpty) { return; //we did not previously save settings } bool SavMaximized = System.Convert.ToBoolean(Global.GetRegSetting(Frm.Name + "_Maximized", false)); bool SavMinimized = System.Convert.ToBoolean(Global.GetRegSetting(Frm.Name + "_Minimized", false)); object ObjSize = Global.GetRegSetting(Frm.Name + "_Size", Frm.RestoreBounds.Size); Size SavSize = (Size)ObjSize; //CType(ObjSize, System.Drawing.Size) //============================================================================================================ //No reliable way of detecting if a screen has been turned off! This will only detect if fully disconnected //============================================================================================================ Rectangle tstrect = new Rectangle(SavLocation, SavSize); if (!SavLocation.IsEmpty && SavLocation.X > 0 && IsVisibleOnAnyScreen(tstrect)) { Frm.Location = SavLocation; if (!SavSize.IsEmpty && SavSize.Width > 5 && SavSize.Height > 5) { Frm.Size = SavSize; } //else //Debug.Print("Saved size not valid."); } //else //Debug.Print("Saved location not valid."); if (SavMaximized) { Frm.WindowState = FormWindowState.Maximized; } else if (SavMinimized) { Frm.WindowState = FormWindowState.Normal; //FormWindowState.Minimized } if (Frm.Tag != null && string.Equals(Frm.Tag.ToString(), "SAVE", StringComparison.OrdinalIgnoreCase)) { List <Control> ctls = GetControls(Frm); foreach (Control ctl in ctls) { if (ctl is SplitContainer) { //SplitContainer sc = (SplitContainer)ctl; //sc.SplitterDistance = System.Convert.ToInt32(Global.GetRegSetting($"{Frm.Name}.SplitContainer.{sc.Name}.SplitterDistance", sc.SplitterDistance)); SplitContainer sc = (SplitContainer)ctl; string name = sc.Name; var fullDistance = new Func <SplitContainer, int>(c => c.Orientation == Orientation.Horizontal ? c.Size.Height : c.Size.Width); // calculate splitter distance with regard to current control size int storedDistance = System.Convert.ToInt32(Global.GetRegSetting($"{Frm.Name}.SplitContainer.{sc.Name}.SplitterDistance", sc.SplitterDistance)); //int distanceToRestore = // sc.FixedPanel == FixedPanel.Panel1 ? storedDistance : // sc.FixedPanel == FixedPanel.Panel2 ? fullDistance(sc) - storedDistance : // storedDistance * fullDistance(sc) / 100; sc.SplitterDistance = storedDistance; } else if (ctl is TabControl) { TabControl tc = (TabControl)ctl; tc.SelectedIndex = System.Convert.ToInt32(Global.GetRegSetting($"{Frm.Name}.TabControl.{tc.Name}.SelectedIndex", tc.SelectedIndex)); } } //else if (ctl is ComboBox) //{ // ComboBox cc = (ComboBox)ctl; // if (cc.Items.Count == 0 && string.IsNullOrEmpty(System.Convert.ToString(cc.Text))) // { // List<string> lst = new List<string>(); // lst = (List<string>)(GetSetting($"{Frm.Name}.ComboBox.{cc.Name}.Items", lst)); // foreach (string st in lst) // cc.Items.Add(st); // cc.Text = System.Convert.ToString(GetSetting($"{Frm.Name}.ComboBox.{cc.Name}.Text", cc.Text)); // } //} //else if (ctl is TextBox) //{ // TextBox tc = (TextBox)ctl; // if (string.IsNullOrEmpty(System.Convert.ToString(tc.Text))) // tc.Text = System.Convert.ToString(GetSetting($"{Frm.Name}.TextBox.{tc.Name}.Text", tc.Text)); //} //else if (ctl is CheckBox) //{ // CheckBox tc = (CheckBox)ctl; // if (tc.CheckState == CheckState.Indeterminate) // { // tc.Checked = System.Convert.ToBoolean(GetSetting($"{Frm.Name}.CheckBox.{tc.Name}.Checked", tc.Checked)); // tc.CheckState = (CheckState)(tc.Checked ? CheckState.Checked : CheckState.Unchecked); // } //} } Global_GUI.SetAppDefaultFont(false, Frm); //If Screen.AllScreens.Any(Function(screen__1) screen__1.WorkingArea.IntersectsWith(Properties.Settings.[Default].WindowPosition)) Then // StartPosition = FormStartPosition.Manual // DesktopBounds = Properties.Settings.[Default].WindowPosition // Frm.WindowState = FormWindowState.Normal //End If //Debug.Print("Size After: " & Me.Size.ToString) //Debug.Print("Loc After: " & Me.Location.ToString) //Debug.Print("WindowState After: " & Me.WindowState.ToString) //}); } catch (Exception) { } }