Я использую TableLayouPanel, программно добавляю строки высотой 50 пикселей каждая. Y-размер TLP составляет 217 пикселей, поэтому добавление 5 строк приводит к появлению вертикальной полосы прокрутки, а также горизонтальной полосы прокрутки.
Когда я добавляю еще одну строку — по-прежнему вертикальную полосу прокрутки — горизонтальная полоса прокрутки исчезает.
Пытался изменить размер TLP на что-то между 200 и 250, остается прежним.
Как удалить это поведение, так как любое количество строк, но 5 работает нормально?
Код из дизайнера и добавление строк:
System.Windows.Forms.TableLayoutPanel tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
tableLayoutPanel1.AutoScroll = true;
tableLayoutPanel1.ColumnCount = 3;
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
tableLayoutPanel1.RowCount = 1;
tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
tableLayoutPanel1.Size = new System.Drawing.Size(709, 217);
tableLayoutPanel1.RowStyles.RemoveAt(0);
for (int i = tableLayoutPanel1.Controls.Count - 1; i >= 0; i--) {
tableLayoutPanel1.Controls[i].Dispose();
}
for(int i = 0; i < 5; i++) {
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 50));
tableLayoutPanel1.Controls.Add(new Control(), 0, i);
tableLayoutPanel1.Controls.Add(new Control(), 1, i);
tableLayoutPanel1.Controls.Add(new Control(), 2, i);
}
if (!tableLayoutPanel1.VerticalScroll.Visible){ //false for 5
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0));
tableLayoutPanel1.Controls.Add(new Control(), 0, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 1, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 2, inp.Count);
}
tl;dr, почему существует горизонтальная полоса прокрутки с 5 строками и как сделать так, чтобы содержимое снова соответствовало внешнему управлению, чтобы его не было?
Думал исправить это, добавив еще одну строку и удалив ее снова, но, поскольку TableLayoutPanel
не дает fck, последняя строка автоматически занимает «оставшееся» пространство удаленной строки... по крайней мере, так выглядит мой текущий прогресс, не уверен, стоит ли мне менять все на DataGridView
DataGridView
для отображения динамических данных в виде строк-столбцов. - person Fabio   schedule 11.07.2017TableLayoutPanel
, у меня уже было так много проблем с ним, и я даже не работаю над большей частью своего проекта, потому что мне все время нужно исправлять какую-то херню макета, вызванную TLP. Спасибо за рекомендациюDataGridView
для будущих проектов, хотя не знаю, стоит ли еще переходить это) - person   schedule 11.07.2017DataGridViewColumn
? Какие данные вы хотите там отображать? - person Fabio   schedule 11.07.2017TableLayoutPanel
-DataGridViewColumn
, так как я уже написал для нее код, и эта сетка должна отображать метки и текстовое поле, иначе мне пришлось бы сделайтеDataGridView
-DataGridViewColumn
с другим столбцом для меток. И даже тогда мне пришлось бы настраивать десятки вещей, о которых я уже позаботился сTableLayoutPanel
. - person   schedule 11.07.2017