2

わかりました、私の問題です。最大化されていない場合、最大サイズはフォーム内のコンポーネントの合計の高さでなければならないフォームがあります。これを達成するために、私はこれを使用します:

    private void resize_form(object sender, EventArgs e)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }

これは、フォームの Resize イベントで発生します。コンポーネントのサイズは常に変化しているため、サイズ変更イベントでこれを行うのは理にかなっています。ただし、フォームを最大化したい場合、フォームは this.MaximumSize で定義された最高の設定になります。だから私は、フォームが最大化されるタイミングを判断し、フォームが最大化する前にその最大サイズを画面の境界に設定する方法があるのだろうかと思っていました。

サイズ変更イベントなしで最大サイズ値を変更するより良い方法があれば、それも素晴らしいでしょう:)

4

5 に答える 5

9

サイズ変更イベントを引き続き使用する必要がありますが、以下を確認してくださいWindowState

if (this.WindowState == FormWindowState.Maximized)
{
    // Do your stuff
}

yshuditelu が指摘しているように、フォームの最小サイズ プロパティも設定できます。これは、アンカー値の賢明な使用と組み合わせると、縮小しすぎず、拡大するとコンポーネントが次のように移動および/または拡大することを意味します。必要。

于 2009-06-02T16:39:18.003 に答える
3

私にぴったりの答えが見つかりました。少しWndProcオーバーライド:D(私は今WndProcが大好きです)

protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MAXIMIZE = 0xF030; 

    switch (message.Msg)
    {
        case WM_SYSCOMMAND:
            int command = message.WParam.ToInt32() & 0xfff0;
            if (command == SC_MAXIMIZE) 
            {
                this.maximize = true;
                this.MaximumSize = new System.Drawing.Size(0, 0);
            }
            break;
    }

    base.WndProc(ref message);
}

private void resize_form(object sender, EventArgs e)
{
    if (!maximize)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }
}

基本的に、SC_MAXIMIZE メッセージを受信すると、this.maximize を true に設定します。this.maximize が false に設定されている場合、サイズ変更イベントは新しい MaximumSize のみを設定します。ニフティ xD

于 2009-06-02T17:14:42.203 に答える