如何防止用户调整表单的大小?
Posted
技术标签:
【中文标题】如何防止用户调整表单的大小?【英文标题】:How do I prevent a form from being resized by the user? 【发布时间】:2010-11-10 07:03:33 【问题描述】:我有一个需要在 VB.net 中最大化的表单。我不希望用户能够改变它的大小或移动它。 我该怎么做?
【问题讨论】:
@Powerlord 你怎么知道它不是某种你想要每一个像素的电影播放器或游戏? Microsoft 在其Form.FormBorderStyle Property 的文档中提供了一个综合示例。 【参考方案1】:设置突出显示的属性。将 MaximimSize 和 MinimizeSize 属性设置为相同大小
【讨论】:
真的一张图值一千字! 请显示 2016 和 2017 窗口。所有的老人都死了。 @YumYumYum 我发现这样做的唯一方法是在我启动表单时在代码中定义它 Controlbox false 不是必需的 将 FormBorderStyle 更改为 FixedDialog 会自动将最小化和最大化框设置为 false。在这种情况下,最小/最大尺寸也无关紧要。【参考方案2】://Set fixed border
yourForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D
//Set the state of your form to maximized
yourForm.WindowState = FormWindowState.Maximized
//Disable the minimize box and the maximize box
yourForm.MinimizeBox = False
yourForm.MaximizeBox = False
【讨论】:
【参考方案3】:为防止用户调整大小,请从属性窗口或代码中将 FormBoderStyle 设置为 Fixed3D 或 FixedDialog
frmYour.BorderStyle = System.WinForms.FormBorderStyle.Fixed3D
并将 WindowState 属性设置为 Maximized,将 MaximizeBox 和 MinimizeBox 属性设置为 false。
要防止用户四处走动,请覆盖 WndProc
Protected Overrides Sub WndProc(ByRef m As Message)
Const WM_NCLBUTTONDOWN As Integer = 161
Const WM_SYSCOMMAND As Integer = 274
Const HTCAPTION As Integer = 2
Const SC_MOVE As Integer = 61456
If (m.Msg = WM_SYSCOMMAND) And (m.WParam.ToInt32() = SC_MOVE) Then
Return
End If
If (m.Msg = WM_NCLBUTTONDOWN) And (m.WParam.ToInt32() = HTCAPTION) Then
Return
End If
MyBase.WndProc(m)
End Sub
【讨论】:
传递给 windows api 的常量 - 每个整数代表一个 Windows 消息命令和相应的参数 这个效果最好,它可以防止用户将表单拖到另一个显示器上(我有一个问题,不确定是 win 8 还是多个显示器导致了这个问题)。 Mucky(不是回答者的错),但答案是正确的。【参考方案4】:将窗口开始样式设置为最大化。然后,隐藏最小化和最大化按钮。
【讨论】:
【参考方案5】:您可以删除 UI 来控制它:
frmYour.MinimizeBox = False
frmYour.MaximizeBox = False
【讨论】:
【参考方案6】:在表单加载事件中添加一些代码:
me.maximumsize = new size(Width, Height)
me.minimumsize = me.maximumsize
me.maximizebox = false
me.minimizebox = false
示例:对于一个高度和宽度各为 50 像素的表单:
me.maximumsize = new size(50, 50)
me.minimumsize = me.maximumsize
me.maximizebox = false
me.minimizebox = false
请注意,将maximumsize
和minimumsize
设置为此处所示的相同大小会阻止调整表单的大小。
【讨论】:
【参考方案7】:将 FormBorderStyle 设置为 'FixedDialog'
【讨论】:
【参考方案8】:如果您想通过拖动 sizegrips 和最大化按钮以及通过双击标题文本最大化来防止调整大小,请在表单的加载事件中插入以下代码:
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle ' Prevent size grips
Me.MaximumSize = Me.Size ' Prevent maximize (also by doubleclick of header text)
当然,所有以 Fixed 开头的 formborderstyle 的选择都可以。
【讨论】:
【参考方案9】:将表单的最小和最大尺寸设置为相同的数字。不显示最小和最大按钮。
【讨论】:
正如@LarsTech 上面所说,您仍然可以在这种情况下手动拉取和调整表单大小,所以这不是完整的答案,可能是其中的一部分,但不会阻止整个问题【参考方案10】:只需在解决方案资源管理器中更改这些设置。
MaximizeBox = False
MinimizeBox = False
ControlBox、Locked、FormBorderStyle等其他东西是额外的。
【讨论】:
The other things such as ControlBox, Locked, and FormBorderStyle are extra.
如果 FormBorderStyle 没有设置为 Fixed 或 None 类型的样式,用户可以调整表单的大小。【参考方案11】:
vb.net 中有一个选项可以让您完成所有这些操作。
用户将无法重新调整表单大小或移动表单,虽然还有其他方法,但我认为这是最好的。
【讨论】:
锁定的属性是“设计时间”-only!以上是关于如何防止用户调整表单的大小?的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView 显示图像时如何防止 UIToolbar 调整大小?