17

こんにちは、tablelayoutpanel があり、コントロールを動的にバインドしています。アイテム数がパネルの高さを超えると、明らかに垂直スクロール バーが表示されても問題ありません。

ただし、アイテムの幅がパネルの幅よりも小さい場合でも、同時に水平スクロールバーも表示されます。どうすればこれを防ぐことができますか?

4

10 に答える 10

41
int vertScrollWidth = SystemInformation.VerticalScrollBarWidth;

tableLayoutPanel1.Padding = new Padding(0, 0, vertScrollWidth, 0);
于 2011-07-02T07:25:08.767 に答える
7

今日これでいくつかの髪の毛を失いましたが、私はそれを解決し、これが私が最終的に得たものです:

  1. TableLayoutPanel から継承する新しいクラスを作成し (MyTableLayoutPanel と呼びましょう)、MaximumSize プロパティを次のようにオーバーライドします。

    public override Size MaximumSize
    {
        get
        {
            if (Parent != null)
                return new Size(Parent.Width, 0);
            else
                return base.MaximumSize;
        }
        set
        {
            base.MaximumSize = value;
        }
    }
    

    もちろん、変更された MaximumSize を返す必要があるかどうかを決定する別のプロパティを追加することで、より一般的な目的にすることもできますが、これを読んでいる人にはそれが明らかであることを願っています.

  2. 取得した TableLayoutPanel を新しい MyTableLayoutPanel タイプに変更します。

  3. 通常のパネルに追加します。MyTableLayoutPanel の代わりに、このパネルで AutoScroll を有効にします (まだ無効にしていない場合は無効にします)。

  4. MyTableLayoutPanel の AutoSize プロパティを true に設定し、その Anchor プロパティを Left、Right、および Top に設定します。

于 2011-08-24T12:05:03.440 に答える
1

私はこの問題を経験しました。

多くの人が Datagrid でも同じ問題を抱えています。ただし、この質問に対する正確な解決策はありません。使用に応じてパネルの寸法を手動で決定する必要があります。

tableLayoutPanel1.HorizontalScroll.Enabled = false;

これにより、水平スクロール バーが無効になりますが、テーブル レイアウト パネルのサイズを手動で調整する必要があります。

別の方法として、実行時に tablelayoutpanel の可能な幅を計算し、設定した値よりも大きい場合は有効にすることができます。

tableLayoutPanel1.HorizontalScroll.Enabled = true;
于 2010-12-01T08:22:44.720 に答える
1

アイテムがレイア​​ウト パネルの幅と正確に同じで、垂直スクロールが表示されたときにコントロールが少し切れて、水平スクロールが強制されるという問題はありますか? その場合は、スクロールバーの可能性を考慮してコントロールの幅を小さくするか、スクロールバーが表示されたときにコントロールを調整してみてください。

于 2010-02-04T05:28:26.500 に答える