【问题标题】:Obtain non-maximized window position/size when window is maximized最大化窗口时获取非最大化窗口位置/大小
【发布时间】:2015-07-21 20:29:50
【问题描述】:

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

问题是窗口最大化时,Width、Height、X、Y不是指未最大化的Width/Height/X/Y,而是指Maximized尺寸。

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

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

【问题讨论】:

    标签: c# forms winforms window maximize


    【解决方案1】:

    我发现解决这个问题的最佳方法是使用 RestoreBounds 结构。当窗口最大化时,RestoreBounds 将引用旧的(非最大化的)大小和位置。这是找出这些值的代码。只需在关闭时保存这些值,然后在重新打开程序时,您可以将表单的 Width、Height、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;
    

    【讨论】:

    • 你到底为什么要通过字符串表示来比较枚举?只需做一个简单的WindowState != FormWindowState.Maximized
    • 根据@cremor 的建议,您可以通过将WindowState == FormWindowState.Maximized 分配给一个var 并测试该布尔值来进一步改进此答案。
    • 好的。我搜索了大约 15 分钟以找到 RestoreBounds 属性,所以这就是答案的核心,它被应用于我创建的旧代码,所以请原谅我没有“优化”以节省 5 毫秒;)跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2011-03-07
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多