重複の可能性:
C#で垂直方向(のみ)のサイズ変更可能なウィンドウフォーム
ユーザーがフォームのサイズを水平方向に変更できるようにする必要がある場合があります。フォームの最大幅はですx
。どうやってやるの?
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
}
コピーおよび変更されたコード:C#で垂直方向(のみ)のサイズ変更可能なウィンドウフォーム
フォームには、MaximumSizeプロパティとMinimumSizeプロパティがあります。
もちろんMaximumSizeの幅を除いて、Sizeと同じように設定します。
MaximizeBoxを無効にすることも、あまり意味がないため、良い考えかもしれません(ウィンドウを現在のモニターの左上隅に配置するだけです)。
持つことができるmex値を保持する静的変数を作成できます。
フォームのサイズ変更イベントで、値が静的な値より大きいかどうかを確認し、その値に変更できます。
int maxValue = 100;
private void MainForm_ResizeEnd(object sender, EventArgs e)
{
if(this.Size.Width > maxValue)
this.Size.Width = maxValue;
}
または、プロパティで最大値を設定できます:MaximunSize
フォームの最小および最大の高さをフォームの初期の高さに設定します。これにより、フォームのサイズが垂直方向に変更されるのを防ぎ、ユーザーがフォームのサイズを水平方向にのみ変更できるようにする必要があります。
水平方向のサイズ変更の境界を設定する場合は、フォームの最小幅または最大幅についても同じようにします。
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;
}