У меня есть ситуация, где для меня было бы выгодно позволить моей форме окон быть измененной пользователем, но только вертикально. После некоторого поиска кажется, что нет очень на этом конкретном предмете. Действительно ли это возможно?
Свойства формы Минимальный размер
и Максимальный размер
необходимо установить на два размера с разной высотой, но одинаковой шириной.
Если вы вообще не хотите, чтобы появился горизонтальный курсор изменения размера, вам нужно будет обрабатывать сообщение 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
}
Пусть FormBordersTyle для изменений и настроили максимализируйте максимализирующие и минимум [2.Width, 0)
Коррекция :
this.MinimumSize = new Size(this.Width, 0);
this.MaximumSize = new Size(this.Width, Int32.MaxValue);
Чтобы избежать «резиновой полосы» эффекта решения @ Orsogufo:
public Form1()
{
InitializeComponent();
this.MinimumSize = new Size(500, 0);
this.MaximumSize = new Size(500, Screen.AllScreens.Max(s => s.Bounds.Height));
}
Это не будет корректно настроить максимальную высоту, чтобы приспособиться к увеличению экрана, если вы измените размер экрана, но для изменений Статические размеры экрана это отлично работает.
Просто идея...
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 работают намного лучше, чем этот хак :)
.Да, это возможно. Просто установите форму.MinimumSize.Width = form.MaximumSize.Width = 100 (или любую другую ширину).
Установите максимальный и минимальный размер только для ширины формы.