将表单大小限制为水平

时间:2012-10-05 16:55:40

标签: c# windows winforms forms resize

  

可能重复:
  Vertically (only) resizable windows form in C#

我有一个案例,我需要允许用户只是水平调整窗体大小。表单的最大宽度为x。我怎么能这样做?

5 个答案:

答案 0 :(得分:9)

将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
}

Vertically (only) resizable windows form in C#

复制和修改代码

答案 1 :(得分:2)

Form具有MaximumSize和MinimumSize属性。

设置它们与Size相同,当然除了MaximumSize的宽度。

禁用MaximizeBox可能也是一个好主意,因为它实际上没有多大意义(它只是将窗口放在当前显示器的左上角)。

答案 2 :(得分:1)

您可以创建一个静态变量来保存它可以拥有的mex值。

在resize事件表单中,您可以检查该值是否超过静态值并将其更改为该值:

int maxValue = 100;

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

或者您可以在属性中设置最大值: MaximunSize

答案 3 :(得分:0)

将表单的最小和最大高度设置为表单的初始高度。 这应该会阻止表单垂直调整大小,并允许用户只水平调整表单大小。

如果要为水平调整大小设置边界,请对窗体的最小或最大宽度执行相同操作。

答案 4 :(得分:0)

在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;
    }