[英]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。
你将不得不做几件事。
保存设置时,您必须将当前 window 坐标转换为主显示器上所需的坐标。 这包括考虑当前显示器和主显示器的分辨率和比例因子(如果它们不同)。 例如,您的主显示器可能为 1920x1200 100% SF,而您的辅助显示器则为 2560x1440 125%。 计算新坐标时,您需要确保新坐标不会超出主监视器的可见区域。
当持久信息保持在 100% SF 时。
恢复时,如果主显示器不是 100% SF,请重新校准 position,并确保坐标在显示器的可见区域内(主显示器可能在应用程序运行之间发生了变化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.