我想阻止用户将 Windows 窗体最大化到全屏,所以我禁用了最大化按钮。但是,我希望能够让用户“恢复”表单。当他们单击“恢复”按钮时,我希望它显示一个不同的、较小的、缩小的表单,这将向他们显示一个最大化按钮,该按钮会将使用返回到原始表单。
有没有办法做到这一点?
谢谢。
编辑:你不明白,我并没有阻止用户调整表单的大小。发生的事情是当单击恢复按钮时,它将隐藏表单并打开一个控件较少的新表单。当他们在较小的表单上单击最大化时,它将返回到原始表单。
我在工作中看到了与此类似的问题,我能找到的唯一解决方案涉及设置未记录的窗口样式,我不倾向于这样做。
因此,我认为解决您的问题的最佳方法是隐藏当前的最小化/最大化/恢复按钮,并使用一些 ownerdraw 或其他命令添加您自己的按钮。
从用户交互的角度来看,我希望最小化/最大化/恢复按钮对您的应用程序执行与对所有其他应用程序执行完全相同的操作。覆盖该功能会给您的用户造成混乱,因此我建议在标题栏或界面上的其他位置创建不同的按钮来执行此功能。
您可以设置MaximumSize和MinimumSize并启用最大化按钮来获得这种效果。
FWIW,正确的答案是使您的表单正确调整大小,以适应任何窗口大小,而不是将用户限制在您的显示器上以您的分辨率和字体大小显示的正确内容。不可调整大小的窗口是我在应用程序中遇到的最烦人的事情之一(Windows 本身就充满了它们)。
我最近遇到了类似的情况,从 UI 设计的角度来看,在 Windows Media Player 中找到了一个很好的例子。它保留了“最小化”、“最大化”和“恢复”按钮,并在右下角有一个单独的按钮,用于“切换到紧凑模式”。在迷你/紧凑模式下,相同的按钮切换到“切换到完整模式”。另一个替代示例是 Skype,它在标准最小化按钮的左侧有一个额外的系统图标按钮,可以在紧凑模式和标准模式之间切换。
(如果我有特权,我更愿意将此作为评论添加到 Daemin 接受的答案中,对于 StackOverflow 来说仍然相对较新)
“恢复”表单会触发Resize
事件,您可以在该事件中检查父表单是否不再是FormWindowState.Maximized
。如果没有,您可以打开子窗体并隐藏父窗体。
要扭转这种情况,您可以通过隐藏(或处置)子表单来“最大化”子表单,然后取消隐藏并将父表单设置为FormWindowState.Maximized
.
我可以使用此方法看到的唯一问题是该Resize
事件可能会在表单达到最大化状态之前触发多次。可能需要一个标志来忽略这些,直到表单从当前状态变为所需状态,这可能导致无限循环。