c# - 窗口最大化时获取非最大化窗口位置/大小

标签 c# forms winforms window maximize

当用户调整我的程序窗口 (Winforms) 的大小和位置时,他们希望在同一位置看到窗口,即使在关闭并重新打开程序后也是如此。我所做的是存储窗体的 Width、Height、Location.X 和 Location.Y 属性,并在程序重新打开时将它们重新设置。

问题是当窗口最大化时,宽度、高度、X、Y 不是指非最大化的宽度/高度/X/Y,而是指最大化的尺寸。

因此,当用户将窗口最大化、关闭并重新打开程序,然后继续取消最大化窗口时,它不会返回到原始位置/大小,而是停留在完整大小/位置。

那么在某些事件执行后不使用kludge来存储变量,如何在窗口最大化时获取非最大化位置和大小?

最佳答案

我发现解决此问题的最佳方法是使用 RestoreBounds 结构。当窗口最大化时,RestoreBounds 将引用旧的(非最大化的)大小和位置。这是找出这些值的代码。只需在关闭时保存这些值,然后当程序重新打开时,您就可以将表单的宽度、高度、Location.X 和 Location.Y 设置回这些保存的值。

bool b = WindowState == FormWindowState.Maximized;
int xpos = !b? Location.X : RestoreBounds.X;
int ypos = !b? Location.Y : RestoreBounds.Y;
int width = !b? Width : RestoreBounds.Width;
int height = !b? Height : RestoreBounds.Height;

关于c# - 窗口最大化时获取非最大化窗口位置/大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165918/

相关文章:

c# - HttpError 和 IHttpActionResult

c# - 过滤 ICollectionView 中的重复条目

php - EasyAdmin 3 - 具有嵌套形式的 CRUD

c# - 具有不同缩放比例的监视器会在屏幕边界之间产生间隙

c# - 检查 WinForm 应用程序中输入的文本

c# - 如何将数据从数据库加载到组合框中

c# - 程序在真正完成之前关闭

c# - 在 MVC 脚本包中使用 CDN。我错过了什么?

javascript - 表单正在提交但未提交

html - 隐藏的浏览按钮弄乱了我的表格