限制性形式调整大小到水平[重复](Limiting form resizing to horizon

2019-09-23 14:19发布

可能重复:
垂直(只)调整大小的窗口在C#形成

我有,我需要让用户只需水平调整窗体的情况下。 形式的最大宽度是x 。 我怎样才能做到这一点?

Answer 1:

设置你的MAXIMUMSIZE和对的minimumSize相同的高度,但可变宽度。

为了使这样的大小调整光标不会在顶部或底部出现:

protected override void WndProc(ref Message m) {
    base.WndProc(ref m);
    switch (m.Msg) {
        case 0x84: //WM_NCHITTEST
            var result = (HitTest)m.Result.ToInt32();
            if (result == HitTest.Top || result == HitTest.Bottom)
                m.Result = new IntPtr((int)HitTest.Caption);
            if (result == HitTest.TopLeft || result == HitTest.BottomLeft)
                m.Result = new IntPtr((int)HitTest.Left);
            if (result == HitTest.TopRight || result == HitTest.BottomRight)
                m.Result = new IntPtr((int)HitTest.Right);

            break;
    }
}
enum HitTest {
    Caption = 2,
    Transparent = -1,
    Nowhere = 0,
    Client = 1,
    Left = 10,
    Right = 11,
    Top = 12,
    TopLeft = 13,
    TopRight = 14,
    Bottom = 15,
    BottomLeft = 16,
    BottomRight = 17,
    Border = 18
}

代码复制并从修改: 在C#垂直(仅)调整大小的窗口的形式



Answer 2:

形式有MAXIMUMSIZE和性能的minimumSize。

它们设置相同的尺寸,除了当然MAXIMUMSIZE的宽度。

这也可能是禁用MaximizeBox,因为它不会真的太大的意义(它只是发生在当前显示器的左上角的窗口)一个好主意。



Answer 3:

您可以创建一个静态变量,将持有的MEX价值在于它可以有。

在窗体调整大小事件时,可以检查该值大于你的静态值更和其更改为值:

int maxValue = 100;

    private void MainForm_ResizeEnd(object sender, EventArgs e)
            {
                 if(this.Size.Width > maxValue)
                     this.Size.Width = maxValue;
            }

或者你可以设置属性的最大值:MaximunSize



Answer 4:

形式的最小和最大高度设定为形式的初始高度。 应该防止形式被垂直调整,并允许用户仅水平调整大小的形式。

如果你想设置界水平尺寸调整,做表格的最小或最大宽度相同。



Answer 5:

在窗体SizeChanged事件,你可以做这样的事情

     private void Form1_ResizeEnd(object sender, EventArgs e) {
        //this does not prevent a resize to full screen

        int i = this.Size.Height;
        //force width to 300
        this.Size = new Size(300, i);
        return;
    }


文章来源: Limiting form resizing to horizontal [duplicate]