繁体   English   中英

记住 window 设置(大小,position,位置)并恢复,但要屏幕 1

[英]Remembering window settings (size, position, location) and restoring, but to screen 1

我有一个 WinForms 应用程序,针对 .NET Framework 4.6.1。 我需要在应用程序运行之间恢复所有 forms 的大小、position 和位置。 这已经通过以下方式实现:

private void saveMainWindowSettings()
{
    Properties.Settings.Default.MainWindowState = this.WindowState;
    if (this.WindowState == System.Windows.Forms.FormWindowState.Normal)
    {
        // save location and size if state is normal
        Properties.Settings.Default.MainWindowLocation = this.Location;
        Properties.Settings.Default.MainWindowSize = this.Size;
    }
    else
    {
        // save the RestoreBounds if the form is maximised or minimised
        Properties.Settings.Default.MainWindowLocation = this.RestoreBounds.Location;
        Properties.Settings.Default.MainWindowSize = this.RestoreBounds.Size;
    }

    // save the main window settings
    Properties.Settings.Default.Save();
}

private void loadMainWindowSettings()
{
    if (Properties.Settings.Default.MainWindowSize.Width == 0 || Properties.Settings.Default.MainWindowSize.Height == 0)
    {
        // first start
        // add default values (size 912x598)
        this.Size = new System.Drawing.Size(912, 598);
    }
    else
    {
         // load the remembered settings

         this.WindowState = Properties.Settings.Default.MainWindowState;

         // we don't want a minimised window at startup
         if (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)
                    this.WindowState = System.Windows.Forms.FormWindowState.Normal;

         this.Location = Properties.Settings.Default.MainWindowLocation;
         this.Size = Properties.Settings.Default.MainWindowSize;
     }
}

FormClosing事件处理程序中调用 saveMainWindowSettings saveMainWindowSettings() loadMainWindowSettings()方法,在Load事件处理程序中调用 loadMainWindowSettings() 方法。

但是,使用多台显示器时会出现问题。 我在家里用笔记本电脑和额外的显示器测试了这段代码,它运行良好。 但是,在使用不同的显示器进行测试时,window 在主屏幕(屏幕 1,笔记本电脑显示器)上不可见,因为在之前的设置中它被拖到了另一台显示器上。 window 是打开的,在任务栏中可见,但根本看不到,也不能拖到主屏幕。 查看它的唯一方法是在任务栏中右键单击它并将其最大化。

为避免此问题,我想将 window 始终恢复到屏幕 1,以便它将在相同的 state(最小化、最大化、正常)中,以及相同的相对大小和 Z4757FE07FD492A8BE3DEA6A760D6 分辨率差异。 如何做到这一点?

我认为“屏幕 1”是指“主显示器”。 所有其他显示都是次要的,在您运行应用程序时可能存在也可能不存在,并且,如果存在,则可能与您保存设置时的显示不同,也可能在应用程序启动时处于相同的排列。

看看这个 API: https://docs.microsoft.com/dotnet/api/system.windows.ZAC6E68B62ABFDC6ACE02C。

你将不得不做几件事。

  1. 保存设置时,您必须将当前 window 坐标转换为主显示器上所需的坐标。 这包括考虑当前显示器和主显示器的分辨率和比例因子(如果它们不同)。 例如,您的主显示器可能为 1920x1200 100% SF,而您的辅助显示器则为 2560x1440 125%。 计算新坐标时,您需要确保新坐标不会超出主监视器的可见区域。

  2. 当持久信息保持在 100% SF 时。

  3. 恢复时,如果主显示器不是 100% SF,请重新校准 position,并确保坐标在显示器的可见区域内(主显示器可能在应用程序运行之间发生了变化)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM