16

AutoScroll=trueでコントロールを動的に作成するためのTableLayoutPanelがあります。新しいコントロールを追加すると問題なく動作します。しかし、削除してすべてのコントロールが表示されると、垂直スクロールが表示されます。ここにいくつかのスクリーンショット:

期待される/正しいスクロールの可視性:

ここに画像の説明を入力してください

不正確な可視性:

ここに画像の説明を入力してください

何か案は?

更新:ここにいくつかのコードがあります

tableLayoutPanel1.SuspendLayout();
tableLayoutPanel1.RowCount = 0;
tableLayoutPanel1.RowStyles.Clear();
tableLayoutPanel1.AutoScroll = true;
tableLayoutPanel1.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0);
foreach (var item in objects)
{
     tableLayoutPanel1.RowCount++;
     tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
     tableLayoutPanel1.Controls.Add(CreateNewItem(item));
 }

 tableLayoutPanel1.RowCount++;
 tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
 tableLayoutPanel1.Controls.Add(CreateAddButton());

 tableLayoutPanel1.ResumeLayout();

および削除するためのコード

tableLayoutPanel1.SuspendLayout();
tableLayoutPanel1.Controls.Remove(item);
tableLayoutPanel1.RowStyles.RemoveAt(0);
tableLayoutPanel1.RowCount--;
tableLayoutPanel1.ResumeLayout();

AutoSizeはtrue、AutoSizeModeはGrowAndShrinkです

4

5 に答える 5

54

問題はTableLayoutPanelのスクロールに関係しています。
TableLayoutPanelの代わりに、スクロールにはPanelを使用する必要があります。
この問題を解決する例を次に示します(垂直スクロールの場合)。

  • TableLayoutPanelプロパティを次のように設定します。
    • Dock = DockStyle.Top
    • AutoSize = true
    • AutoSizeMode = AutoSizeMode.GrowAndShrink
    • AutoScroll=false。
  • TableLayoutPanelをプロパティを持つパネルに配置します:
    • Dock = DockStyle.Fill
    • AutoScroll = true
    • AutoSize=false。
于 2014-09-01T07:50:43.703 に答える
2

動的コントロールを削除するときは、追加中に挿入された余分な行を削除し、テーブルレイアウトパネルの高さをスクロールコンテナーの高さよりも小さくする必要があります。

追加中に、テーブルレイアウトパネルの高さが増加し、スクロールコンテナによって処理されます。ただし、コントロールを削除しても、テーブルレイアウトパネルの高さによって、スクロールコンテナに合わせて高さが減ることはありません。

これを行う1つの方法は、行に固定の高さを与え、テーブルレイアウトパネルのサイズを「自動」に設定することです。

于 2013-03-25T17:29:05.150 に答える
1

最も簡単で面白い解決策の1つは、 tableLayoutPanel1.AutoScrollを無効にしてから有効にすること です。

削除手順コードの最後に次のコードを追加します。

    tableLayoutPanel1.AutoScroll = False
    tableLayoutPanel1.AutoScroll = True
于 2020-09-17T18:35:27.097 に答える
0

tableLayoutPanelをXtraScrollableControl(Devexpressコントロール)に挿入しました。tableLayoutPanel.DockをTopに設定し、XtraScrollableControl.DockをFillに設定します。この解決策ではこの問題は解決しませんでしたが、必要な動作が得られました。

于 2013-03-26T08:22:14.573 に答える
0

TableLayoutPanelの行数を数えて、いくつ収まるかを確認しました。適合する量より下で、addメソッドとdeleteメソッドにAutoScroll=falseを設定しました。スクロールは大きなセットでは表示され、小さなセットでは消えます。

if (tableLayoutPanel.RowCount < 15)
{
    panel1.AutoScroll = false;
}
else
{
     panel1.AutoScroll = true;
}
于 2017-09-01T16:08:59.310 に答える