TableLayoutPanel を動的に作成してから、その中に配置する Label と TextBoxes を動的に作成しています。
列と行の数を TableLayoutPanel に割り当てることができるのは論理的に思えます。
tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel();
tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
tableLayoutPanelGreatGooglyMoogly.ColumnCount = NUMBER_OF_COLUMNS;
...その中に配置するコントロールを作成します。
Label lbl = new Label();
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
. . .
...そして、作成されたコントロールを指定された「セル」(列と行) に配置します。
tableLayoutPanelGreatGooglyMoogly.SetColumn(lbl, ACol); // "ACol" is the current column
tableLayoutPanelGreatGooglyMoogly.SetRow(lbl, i); // "i" is the current row
...しかし、それは機能しません-動的に作成された子コントロールの幅と高さの値を指定した場合も、指定しなかった場合も(その場合、それらは大きすぎます-具体的には、幅が大きすぎます)。
アップデート
このコードを追加しましたが、違いはありません。
// 行
tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
TableLayoutRowStyleCollection rowStyles =
this.tableLayoutPanelGreatGooglyMoogly.RowStyles;
foreach (RowStyle rStyle in rowStyles) {
rStyle.SizeType = SizeType.Percent;
rStyle.Height = 8;
}
// COLUMNS
tableLayoutPanelGreatGooglyMoogly.ColumnCount = TOTAL_NUMBER_OF_COLUMNS;
TableLayoutColumnStyleCollection columnStyles =
this.tableLayoutPanelGreatGooglyMoogly.ColumnStyles;
foreach (ColumnStyle cStyle in columnStyles) {
cStyle.SizeType = SizeType.Percent;
cStyle.Width = 12;
}
UPDATEからUPDATEへ
設計時に、Label または TextBox (おそらく任意のコントロール) に Cell[col,row] プロパティがあることがわかります。読み取り専用でない場合は、動的にアクセスして、次のように設定できるようにしたいと思います。
lbl.Cell = i,i
txtbox.Cell = i+1,i
コードでそれを行うことは可能ですか?その時点では、「Cell」プロパティは認識されていないようです(当然のことだと思います)。
UPDATE REVISITED への UPDATE
次のコード行を追加しました。
tableLayoutPanelGreatGooglyMoogly.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
...そして、ラベルとテキストボックスが実際にセル(列と行) にあることがわかりました。
ただし、ラベルをセルの左上隅からセルの中央 (垂直方向と水平方向の両方) に移動する必要があります。
設計時でも (フォームに「テスト」/一時的な TableLayoutPanel を使用)、追加されたラベルは、TextAlign を何に設定しても (「中央」が最も賢明なようです)、セルの左上に頑固に貼り付けられたままです。
同様に、設計時にラベルの Location.X と Location.Y を変更しても何も起こりません。ラベルは、フジツボのようにセルの北西の角にくっついています。