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