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

Ben*_*Ben 35 c# resize winforms

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

SLa*_*aks 75

您需要将窗体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
}
Run Code Online (Sandbox Code Playgroud)

  • 简直不敢相信我没有想到这一点......非常好!并感谢WndProc隐藏调整大小光标的细节! (5认同)

Pao*_*sco 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Gab*_*abe 7

仅为表单宽度设置最大和最小大小.