垂直(仅)可调整大小的窗口在C#中形成

时间:2010-01-26 16:39:47

标签: c# winforms resize

我有一种情况,我允许用户调整窗体大小,但只能垂直调整窗口大小。经过一番搜索,似乎这个特定的主题并不多。有可能吗?

6 个答案:

答案 0 :(得分:74)

您需要将表单的MinimumSizeMaximumSize属性设置为两种不同高度但宽度相等的尺寸。

如果您不希望水平调整大小光标出现,则需要处理WM_NCHITTEST消息,如下所示:

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.Left || result == HitTest.Right)
                m.Result = new IntPtr((int)HitTest.Caption);
            if (result == HitTest.TopLeft || result == HitTest.TopRight)
                m.Result = new IntPtr((int)HitTest.Top);
            if (result == HitTest.BottomLeft || result == HitTest.BottomRight)
                m.Result = new IntPtr((int)HitTest.Bottom);

            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
}

答案 1 :(得分:12)

只是一个想法......

public partial class Form1 : Form {
    int _width;

    public Form1() {
        _width = this.Width;
        InitializeComponent();
    }

    protected override void OnResize(EventArgs e) {
        this.Width = _width;
        base.OnResize(e);
    }
}

编辑:请注意,最小/最大尺寸解决方案比这个黑客工作要好得多:)

答案 2 :(得分:7)

设置最高&最小尺寸仅适用于表格宽度。

答案 3 :(得分:2)

让FormBorderStyle为Resizable并设置MaximumSize和MinimumSize = new Size(this.Width,0)

<强>校正

this.MinimumSize = new Size(this.Width, 0);
this.MaximumSize = new Size(this.Width, Int32.MaxValue);

答案 4 :(得分:1)

是的,有可能。只需设置你的form.MinimumSize.Width = form.MaximumSize.Width = 100(或你想要的任何宽度)。

答案 5 :(得分:0)

为了避免@ orsogufo解决方案的“橡皮筋”效应:

public Form1()
{
    InitializeComponent();
    this.MinimumSize = new Size(500, 0);
    this.MaximumSize = new Size(500, Screen.AllScreens.Max(s => s.Bounds.Height));
}

如果调整屏幕边界大小,它将无法正确调整其最大高度以容纳更大的屏幕,但对于静态屏幕尺寸,它可以很好地工作。