如何防止用户调整表单的大小?

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

请注意,将maximumsizeminimumsize 设置为此处所示的相同大小会阻止调整表单的大小。

【讨论】:

【参考方案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!

以上是关于如何防止用户调整表单的大小?的主要内容,如果未能解决你的问题,请参考以下文章

从底部调整大小时防止Windows窗体元素离开视图?

如何防止调整大小的TextArea溢出页面?

UIImageView 显示图像时如何防止 UIToolbar 调整大小?

如何防止手动调整 md-input-container 的大小

防止在 Android 浏览器中从键盘调整页面大小

调整 iframe 大小时,如何防止 swf 刷新?