Możliwe, że nie używam odpowiedniego elementu sterującego do tego, co chcę. Wypełniam tabelę kontrolkami i chcę, aby każda kolumna automatycznie dopasowywała się do kontrolek w niej zawartych. Na przykład kolumna pól tekstowych będzie szersza niż kolumna pól wyboru. Nie chcę się bawić przy pomiarze, jeśli mogę pomóc, ze względu na złożoność różnych systemów operacyjnych, różnych DPI, różnych czcionek itp. Tabela może się rozciągać poziomo w celu dopasowania do elementów sterujących za pomocą paska przewijania. Jak to jest możliwe z TableLayoutPanel - lub inną formant?Rozmiar tabeli TableLayoutPanel
Dzięki.
Edited by dodać kod:
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;
}*/
}
(Tak musi ciężki refaktoryzacji - Po prostu staram się zmusić go do pracy pierwszy)
zakomentowanym bity powodować poza granicami wyjątkami, nawet choć logicznie (do mnie) nie powinno. Zakres wydaje się ograniczony do tego, co ustawiłem w czasie projektowania, a nie w czasie wykonywania.
Ile kolumn masz? – CharithJ
Jeśli w danej kolumnie występują tylko pola wyboru, dlaczego konieczna jest zmiana rozmiaru? – CharithJ
Kolumny nie muszą dynamicznie zmieniać rozmiaru, ale ustawione na konkretny rozmiar po dodaniu elementów sterujących. W tej chwili używam rozmiaru automatycznego, co oznacza, że wszystkie kolumny mają tę samą szerokość. – GeoffM