0

左、中央、右の 3 つの部分に分割されたレイアウト コントロールを持つフォームがあります。デフォルトでは、右側のレイアウト コントロール項目 (2 つのグリッドがある) は非表示になっています。フォームを右側に展開して 2 つのグリッドを表示するボタンがフォームにあります。ボタンをもう一度クリックすると、右のレイアウト コントロール項目が非表示になり、フォームのサイズが再び変更されます。基本的な機能は正常に動作していますが、ユーザーがボタンを押したときに MinimumSize も更新したいと思います (フォームが展開されている間、最小幅を増やす必要があります)。これは私の現在のコードです:

private void btnExpand_Click(object sender, EventArgs e)
    {
        this.SuspendLayout( );
        switch (lciRight.Visibility)
        {
            case LayoutVisibility.Never:
                LoadGrids();
                lciRight.Visibility = LayoutVisibility.Always;
                this.Width += lciRight.Width;
                this.MinimumSize = new Size(this.Width, this.MinimumSize.Height);
                btnExpand.Text = "<<";
                break;
            case LayoutVisibility.Always:
                lciRight.Visibility = LayoutVisibility.Never;
                this.MinimumSize = new Size(689, this.MinimumSize.Height);
                this.Width -= lciRight.Width;
                btnExpand.Text = ">>";
                break;
            default:
                break;
        }
        this.ResumeLayout();
    }

私が抱えている問題は、フォームがすでに展開されていて、ボタンをクリックして元のサイズに戻すと、

this.MinimumSize = new Size(689, this.MinimumSize.Height);

行が MinimumSize を正しく更新していません。理由はありますか?

4

1 に答える 1

2

これは非常に簡単な関数です。

次の行を実行した後、このプロパティ(およびレイアウトに関連するその他のプロパティ)への変更を確認する必要があることを考慮してください。

  this.ResumeLayout();

理由は-SuspendLayout()アプリケーションのパフォーマンスを向上させるために、レイアウトを制御するためのすべての変更を一時停止します。

プロパティがまだ変更されていない場合は、おそらく他の場所でそれをオーバーライドします(幅を1100に設定します)。

于 2012-12-21T15:45:03.037 に答える