TableLayoutPanel отображает вертикальную прокрутку
у меня есть TableLayoutPanel для динамического создания элементов управления с AutoScroll = true. Это нормально работать, когда я добавляю новые элементы управления. Но когда я удаляю и все элементы управления видны, отображается вертикальная прокрутка. Некоторые скриншоты здесь:
ожидаемая / правильная видимость прокрутки:
неправильные видимость:
какие идеи?
обновление: Вот код
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;
}