winforms – 如何恢复最小化的形式
发布时间:2020-12-14 03:52:24 所属栏目:Windows 来源:网络整理
导读:这是一个平凡的问题,我认为我可以立即修复它,但不是. 我的表单大小和位置在退出时保存在应用程序设置中,以便在下次运行应用程序时进行恢复.如果用户在最小化时关闭表单,则无法恢复到正常状态.表单恢复为最小化,单击任务栏按钮不执行任何操作.我在FormClosing
这是一个平凡的问题,我认为我可以立即修复它,但不是.
我的表单大小和位置在退出时保存在应用程序设置中,以便在下次运行应用程序时进行恢复.如果用户在最小化时关闭表单,则无法恢复到正常状态.表单恢复为最小化,单击任务栏按钮不执行任何操作.我在FormClosing事件中保存位置和大小,但如果表单最小化,我将保存最小化的大小(160,40)和位置(-32000,-32000),这对于恢复表单完全不正确.我想强制表单永远不会恢复最小化,但它是最后一个正常的大小和位置.不知何故,我必须在窗体最小化之前捕获大小和位置并保存,然后在FormClosing上,如果窗体最小化,则不保存大小和位置.这可能不是100%明确,但我希望有人对此有所了解. FormClosing处理程序: private void MainForm_FormClosing(object sender,FormClosingEventArgs e) { Settings.Default.WindowLocation = Location; Settings.Default.WindowSize = Size; Settings.Default.WindowState = WindowState; Settings.Default.Save(); } 恢复代码: private void RestoreWindow() { Location = Settings.Default.WindowLocation; if(Location.X == 0 && Location.Y == 0) StartPosition = FormStartPosition.CenterScreen; Size = Settings.Default.WindowSize; WindowState = FormWindowState.Normal; if(Size.Width > Screen.PrimaryScreen.WorkingArea.Width) { Location = new Point(0,Location.Y); Size = new Size(Screen.PrimaryScreen.WorkingArea.Width,Size.Height); } if(Size.Height > Screen.PrimaryScreen.WorkingArea.Height) { Location = new Point(Location.X,0); Size = new Size(Size.Width,Screen.PrimaryScreen.WorkingArea.Height); } } 解决方法
如果表单不在正常状态,则不应保存表单的位置或大小:
private void MainForm_FormClosing(object sender,FormClosingEventArgs e) { if (this.WindowState == FormWindowState.Normal) { Settings.Default.WindowLocation = Location; Settings.Default.WindowSize = Size; } Settings.Default.WindowState = WindowState; Settings.Default.Save(); } 您的还原窗口例程并不完整.如果您将表单居中,为什么要保存位置?在Minimized模式下启动程序可能是不可取的,在这种情况下,我会将其默认为Normal: private void RestoreWindow() { this.Location = Settings.Default.WindowLocation; this.Size = Settings.Default.WindowSize; // check for size or location off-screen,etc. if ((FormWindowState)Settings.Default.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal; else this.WindowState = Settings.Default.WindowState; } 如果您需要恢复窗口所在的最后一个正常位置,则可以使用OnResizeEnd覆盖来保存设置: protected override void OnResizeEnd(EventArgs e) { if (this.WindowState == FormWindowState.Normal) { Properties.Settings.Default.Location = this.Location; Properties.Settings.Default.Size = this.Size; } base.OnResizeEnd(e); } 然后你的结束活动就是: protected override void OnFormClosing(FormClosingEventArgs e) { Properties.Settings.Default.WindowState = this.WindowState; Properties.Settings.Default.Save(); base.OnFormClosing(e); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Windows – 组策略未在同一个doman上应用或被某些
- windows-services – 如何将我的应用程序作为Win
- windows-server-2003 – Linux / Unix中的w命令是
- Drools.NET与Windows Workflow Foundation(WF)
- 在windows下使用Cygwin模拟unix环境 并安装apt-c
- Microsoft .NET Framework多个远程代码执行漏洞(
- 如何在Windows上使用PyPy?
- Windows Azure网站是32位还是64位?
- 有没有办法让Windows重新加载驱动程序而不重启?
- Windows10内置Linux子系统初体验
热点阅读