Exemple #1
0
        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)
            {
            }
        }