TableLayoutPanel отображает вертикальную прокрутку

у меня есть TableLayoutPanel для динамического создания элементов управления с AutoScroll = true. Это нормально работать, когда я добавляю новые элементы управления. Но когда я удаляю и все элементы управления видны, отображается вертикальная прокрутка. Некоторые скриншоты здесь:

ожидаемая / правильная видимость прокрутки: enter image description here

неправильные видимость: enter image description here

какие идеи?

обновление: Вот код

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 истинно, AutoSizeMode GrowAndShrink

4 ответов


проблема прокрутка TableLayoutPanel.
Вы должны использовать панель для прокрутки вместо TableLayoutPanel.
Вот пример решения этой проблемы (для вертикальной прокрутки) :

  • задайте свойства TableLayoutPanel следующим образом :
    • Dock = DockStyle.Топ!--10-->
    • AutoSize = true
    • AutoSizeMode = AutoSizeMode.GrowAndShrink
    • AutoScroll = ложный.
  • поместите TableLayoutPanel в панель со свойствами :
    • Dock = DockStyle.Заполнить
    • AutoScroll = true
    • AutoSize = false.

при удалении динамических элементов управления необходимо удалить дополнительные строки, вставленные во время добавления, и изменить размер панели компоновки таблицы на меньший, чем высота контейнера прокрутки.

во время добавления высота панели компоновки таблицы увеличилась бы, что обрабатывается контейнером прокрутки; но при удалении элементов управления высота панели компоновки таблицы не уменьшает ее высоту, чтобы соответствовать контейнеру прокрутки.

один из способов сделать это дайте фиксированную высоту строкам и установите панель компоновки таблицы seize в "Auto".


я вставил tableLayoutPanel в XtraScrollableControl (элемент управления Devexpress). управления tablelayoutpanel.Док-станция установлена в Top и XtraScrollableControl.Док для заполнения. Это решение не решает эту проблему, но я получил поведение, которое мне нужно.


Я подсчитал количество строк в моей TableLayoutPanel, чтобы увидеть, сколько будет соответствовать. Ниже суммы, которая подходит, я устанавливаю AutoScroll = false для методов add и delete. Прокрутка появится для больших наборов и исчезнет на небольших наборах.

if (tableLayoutPanel.RowCount < 15)
{
    panel1.AutoScroll = false;
}
else
{
     panel1.AutoScroll = true;
}