Es posible que no use el control adecuado para lo que quiero. Estoy llenando una tabla con controles y quiero que cada columna se ajuste automáticamente a los controles que contiene. Por ejemplo, una columna de cuadros de texto será más ancha que una columna de casillas de verificación. No quiero complicarme con la medición si puedo evitarlo, debido a las complejidades de los diferentes sistemas operativos, diferentes DPI, diferentes fuentes, etc. La tabla puede expandirse horizontalmente para ajustarse a los controles, con una barra de desplazamiento. ¿Cómo es esto posible con TableLayoutPanel, o algún otro control?TableLayoutPanel de dimensionamiento
Gracias.
Editado para agregar código:
private void UpdateLocations()
{
tableLayoutPanel1.RowCount = CurrentSchedule.location.Length + 1;
tableLayoutPanel1.ColumnCount = 7;
int row = 1;
int timeWidth = TextRenderer.MeasureText("00:00:00x", tableLayoutPanel1.Font).Width;
Label lab = new Label();
lab.Text = "Location";
tableLayoutPanel1.Controls.Add(lab, 0, 0);
lab = new Label();
lab.Text = "Arrive";
tableLayoutPanel1.Controls.Add(lab, 1, 0);
lab = new Label();
lab.Text = "Depart";
tableLayoutPanel1.Controls.Add(lab, 2, 0);
lab = new Label();
lab.Text = "Pass?";
tableLayoutPanel1.Controls.Add(lab, 3, 0);
lab = new Label();
lab.Text = "Path";
tableLayoutPanel1.Controls.Add(lab, 4, 0);
lab = new Label();
lab.Text = "Plat";
tableLayoutPanel1.Controls.Add(lab, 5, 0);
lab = new Label();
lab.Text = "Line";
tableLayoutPanel1.Controls.Add(lab, 6, 0);
foreach (location loc in CurrentSchedule.location)
{
TextBox tb = new TextBox();
tb.Text = loc.locationID;
tableLayoutPanel1.Controls.Add(tb, 0, row);
tb = new TextBox();
tb.Text = loc.arrivalTime;
tb.Width = timeWidth;
tableLayoutPanel1.Controls.Add(tb, 1, row);
tb = new TextBox();
tb.Text = loc.departureTime;
tb.Width = timeWidth;
tableLayoutPanel1.Controls.Add(tb, 2, row);
CheckBox cb = new CheckBox();
cb.Checked = loc.passingTime;
tableLayoutPanel1.Controls.Add(cb, 3, row);
tb = new TextBox();
tb.Text = loc.pathCode;
tableLayoutPanel1.Controls.Add(tb, 4, row);
tb = new TextBox();
tb.Text = loc.platformCode;
tableLayoutPanel1.Controls.Add(tb, 5, row);
tb = new TextBox();
tb.Text = loc.lineCode;
tableLayoutPanel1.Controls.Add(tb, 6, row);
row++;
}
/*for (int idx = 0; idx < tableLayoutPanel1.RowCount; idx++)
{
tableLayoutPanel1.RowStyles[idx].SizeType = SizeType.AutoSize;
}
for (int idx = 0; idx < tableLayoutPanel1.ColumnCount; idx++)
{
tableLayoutPanel1.ColumnStyles[idx].SizeType = SizeType.AutoSize;
}*/
}
(Sí se necesita refactorización pesada - Sólo estoy tratando de conseguir que funcione primero)
Los bits comentadas hacen fuera de límites excepciones, incluso aunque lógicamente (para mí) no debería. El rango parece estar limitado a lo que configuro en el momento del diseño, no en el tiempo de ejecución.
¿Cuántas columnas tiene? – CharithJ
Si una columna en particular tiene solo casillas de verificación, ¿por qué necesitan cambiar el tamaño? – CharithJ
Las columnas no necesitan cambiar el tamaño dinámicamente, sino establecerlas en un tamaño particular una vez que se agreguen los controles. En este momento estoy usando el tamaño automático, lo que significa que todas las columnas tienen el mismo ancho. – GeoffM