3

自然に収まるよりも多くの垂直画面スペースが必要な場合があるパネルがあるため、垂直方向にスクロールできる必要があります。したがって、すべて AutoScroll に設定されています。

コントロールは TableLayoutPanel 内に含まれており、ドッキングするように設定されているため、幅を一致するようにサイズ変更する必要があります。ただし、コントロールがスクロールバーをトリガーすると、違反しているコントロールに最小幅の制約がないにもかかわらず、常に水平スクロールバーが作成されます。ドックコマンドを尊重し、新しい幅に合わせてコントロールを再描画するのではなく、以前の幅に基づいて水平スクロールバーを作成しています。

これを回避するより良い方法はありますか?

4

2 に答える 2

1

はい、それはレイアウトの計算方法からの必然的な結果です。水平スクロールバーを取り除くには、計算を複数回実行する必要がありますが、.NET では 1 回しか実行されません。正当な理由により、レイアウトは双安定であり、2 つの状態の間を際限なく行き来します。

ここで TableLayoutPanel がどのように役立つか、またはそれが成長する理由がよくわかりません。一般的には、ドッキングせずに、パネルを埋めたいサイズにします。おそらくこのようなもの:

    bool resizingTlp;

    private void tableLayoutPanel1_Resize(object sender, EventArgs e) {
        if (resizingTlp) return;
        resizingTlp = true;
        if (tableLayoutPanel1.Height <= panel1.ClientSize.Height) tableLayoutPanel1.Width  panel1.ClientSize.Width;
        else tableLayoutPanel1.Width = panel1.ClientSize.Width - SystemInformation.VerticalScrollBarWidth;
        resizingTlp = false;
    }
于 2011-12-29T22:15:12.843 に答える
1

これを試して:

Outer panel:{AutoScroll=true, Dock=Fill}
Inner panel:{Dock=Top,Width=customwidth}
于 2011-12-29T22:09:53.000 に答える