3

重複の可能性:
C#で垂直方向(のみ)のサイズ変更可能なウィンドウフォーム

ユーザーがフォームのサイズを水平方向に変更できるようにする必要がある場合があります。フォームの最大幅はですx。どうやってやるの?

4

5 に答える 5

9

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#で垂直方向(のみ)のサイズ変更可能なウィンドウフォーム

于 2012-10-05T16:58:59.647 に答える
2

フォームには、MaximumSizeプロパティとMinimumSizeプロパティがあります。

もちろんMaximumSizeの幅を除いて、Sizeと同じように設定します。

MaximizeBoxを無効にすることも、あまり意味がないため、良い考えかもしれません(ウィンドウを現在のモニターの左上隅に配置するだけです)。

于 2012-10-05T17:00:57.907 に答える
1

持つことができるmex値を保持する静的変数を作成できます。

フォームのサイズ変更イベントで、値が静的な値より大きいかどうかを確認し、その値に変更できます。

int maxValue = 100;

    private void MainForm_ResizeEnd(object sender, EventArgs e)
            {
                 if(this.Size.Width > maxValue)
                     this.Size.Width = maxValue;
            }

または、プロパティで最大値を設定できます:MaximunSize

于 2012-10-05T16:59:47.600 に答える
0

フォームの最小および最大の高さをフォームの初期の高さに設定します。これにより、フォームのサイズが垂直方向に変更されるのを防ぎ、ユーザーがフォームのサイズを水平方向にのみ変更できるようにする必要があります。

水平方向のサイズ変更の境界を設定する場合は、フォームの最小幅または最大幅についても同じようにします。

于 2012-10-05T16:59:15.167 に答える
0

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;
    }
于 2012-10-05T17:21:06.143 に答える