Вертикально (только) окна изменяемого размера формируются в C#

У меня есть ситуация, где для меня было бы выгодно позволить моей форме окон быть измененной пользователем, но только вертикально. После некоторого поиска кажется, что нет очень на этом конкретном предмете. Действительно ли это возможно?

35
задан Bo Persson 5 May 2012 в 06:56
поделиться

6 ответов

Свойства формы Минимальный размер и Максимальный размер необходимо установить на два размера с разной высотой, но одинаковой шириной.

Если вы вообще не хотите, чтобы появился горизонтальный курсор изменения размера, вам нужно будет обрабатывать сообщение 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
}
75
ответ дан 27 November 2019 в 06:36
поделиться

Пусть FormBordersTyle для изменений и настроили максимализируйте максимализирующие и минимум [2.Width, 0)

Коррекция :

this.MinimumSize = new Size(this.Width, 0);
this.MaximumSize = new Size(this.Width, Int32.MaxValue);
3
ответ дан 27 November 2019 в 06:36
поделиться

Чтобы избежать «резиновой полосы» эффекта решения @ Orsogufo:

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

Это не будет корректно настроить максимальную высоту, чтобы приспособиться к увеличению экрана, если вы измените размер экрана, но для изменений Статические размеры экрана это отлично работает.

0
ответ дан 27 November 2019 в 06:36
поделиться

Просто идея...

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

EDIT: пожалуйста, обратите внимание, что решения по размеру min/max работают намного лучше, чем этот хак :)

.
12
ответ дан 27 November 2019 в 06:36
поделиться

Да, это возможно. Просто установите форму.MinimumSize.Width = form.MaximumSize.Width = 100 (или любую другую ширину).

1
ответ дан 27 November 2019 в 06:36
поделиться

Установите максимальный и минимальный размер только для ширины формы.

7
ответ дан 27 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: