Автоматически изменять размер строки TableLayoutPanel при изменении размера окна

У меня простой 1х3 TableLayoutPanel. Я хочу добиться очень простой вещи: при изменении размера окна измените размер средней строки и оставьте верхнюю и нижнюю одинаковыми. Я попытался сделать логическую вещь, установив жесткие размеры верхнего и нижнего рядов и автоматический размер среднего ряда. К сожалению, это нижний ряд, который изменяет размер.

// 
// tableLayoutPanel1
// 
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.topPanel, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.middlePanel, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.bottomPanel, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 140F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1102, 492);
this.tableLayoutPanel1.TabIndex = 19;

На всех внутренних панелях для док-станции задано значение «Заливка» и якоря по умолчанию. Что я делаю неправильно?


person John NoCookies    schedule 18.07.2013    source источник


Ответы (3)


Измените среднюю строку на 100% процентов, что сообщит системе, что средняя строка заполнит любой оставшийся пробел. Итак, измените это (я считаю, что это ваш Designer.cs):

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());

to:

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));

Проверьте TableLayoutPanel.RowStyle из MSDN:

  1. Строки со значением RowStyle, установленным на Absolute, рассматриваются первыми, и выделяется их фиксированная высота.
  2. Строки, в которых RowStyle имеет значение AutoSize, имеют размер в соответствии с их содержимым.
  3. Оставшееся пространство делится между строками, для которых для RowStyle задано значение Percent.
person Bolu    schedule 18.07.2013

Просто установите абсолютные размеры для первой и третьей строк:

tableLayoutPanel1.RowStyles[0].Height = 100;
tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[2].Height = 100;
tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Absolute;

Чтобы убедиться, что вторая (средняя) строка должна иметь SizeType = SizeType.Percent и Height = 100. Ваш Form должен иметь максимум Height из 200.

person King King    schedule 18.07.2013

я сделал

this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
     this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));

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

person No Idea For Name    schedule 18.07.2013