Estoy usando TableLayoutPanel para dividir un área de cliente en 3 filas (solo hay 1 columna). Las filas superior e inferior están diseñadas para ser de altura fija; contendrán un encabezado y un pie de página que inicialmente contienen un control de etiqueta hijo que contiene texto estático (solo para comenzar con). La fila del medio debe ser de tamaño dinámico para llenar el área restante. Este panel central eventualmente contendrá una vista de lista. Tengo una clase director que toma como argumento el (ExplorerTableLayoutPanel) objeto del panel está manejando:TableLayoutPanel: No se pueden obtener correctamente las filas de contenido
public class ExplorerTableLayoutPanelManager
{
public ExplorerTableLayoutPanelManager(ExplorerTableLayoutPanel panel)
{
LayoutPanel = panel;
}
Hay 3 métodos que crean cada una de las 3 filas en el diseño de la mesa:
private void AddHeaderRow()
{
const int headerHeight = 30;
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, headerHeight));
Label label = new Label();
label.BackColor = Color.AliceBlue;
label.BorderStyle = BorderStyle.None;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleRight;
label.Text = "Header Banner";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 0;
LayoutPanel.Controls.Add(label, column, row);
}
private void AddBodyRow()
{
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
Label label = new Label();
label.BorderStyle = BorderStyle.FixedSingle;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Text = "Content Under construction ...";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 1;
LayoutPanel.Controls.Add(label, column, row);
}
private void AddFooterRoow()
{
const int footerHeight = 30;
LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, footerHeight));
Label label = new Label();
label.BackColor = Color.AliceBlue;
label.BorderStyle = BorderStyle.None;
label.ForeColor = Color.LightGray;
label.TextAlign = ContentAlignment.MiddleRight;
label.Text = "Footer Banner";
label.Dock = DockStyle.Fill;
float size = label.Font.SizeInPoints;
label.Font = new Font(label.Font.Name, size * 2);
const int column = 0, row = 2;
LayoutPanel.Controls.Add(label, column, row);
}
Los El problema que estoy viendo es que la última fila ocupa la altura de fila fija que he solicitado como 30. Esta parte es correcta. Sin embargo, la primera y la segunda filas están dividiendo el espacio restante por igual entre ellas, que no es lo que quiero. Como puede ver, he establecido explícitamente la altura de fila en 30 para la primera fila exactamente de la misma manera que lo hice para la última fila, pero parece que esto no funciona. La 2ª fila (centro) tiene su tamaño de RowStyle configurado en SizeType.AutoSize, que creo que debe significar que se agote el espacio restante, por lo tanto, no establezca explícitamente el tamaño. Puedo estar equivocado, pero no estoy seguro.
que las costuras se está simulando "muelle" propiedad layout con una mesa. –