2013-07-18 6 views
5

У меня есть простой 1x3 TableLayoutPanel. Я хочу достичь очень простой вещи: когда окно изменяется, измените размер среднего ряда и сохраните верхний и нижний те же. Я попытался сделать логическую вещь, которая устанавливает жесткие размеры верхнего и нижнего ряда и авторазмер для средней строки. К сожалению, это нижняя строка, которая изменяет размер.Автоматически изменяет размер таблицы 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; 

Все внутренние панели имеют док-станцию ​​для заполнения и анкеры по умолчанию. Что я делаю не так?

ответ

8

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

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

к:

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

Check TableLayoutPanel.RowStyle from MSDN:

  1. Ряды с RowStyle, установленным в Абсолюте считается первым, и их фиксированные высоты распределены.
  2. Строки с RowStyle, установленными в AutoSize, соответствуют их содержимому.
  3. Оставшееся пространство делится между рядами с RowStyle, установленными на Percent.
1

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

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.

1

я сделал

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)); 

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

Смежные вопросы