我正在动态创建一个 TableLayoutPanel,然后动态创建标签和文本框以放入其中。
我可以将列数和行数分配给 TableLayoutPanel,这似乎是合乎逻辑的:
tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel();
tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
tableLayoutPanelGreatGooglyMoogly.ColumnCount = NUMBER_OF_COLUMNS;
...创建放置在其中的控件:
Label lbl = new Label();
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
. . .
...然后将创建的控件 [s] 放入指定的“单元格”(列和行)中:
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;
}
更新到更新
我看到在设计时,标签或文本框(可能是任何控件)具有 Cell[col,row] 属性。如果它不是只读的,我想动态访问它,以便我可以设置:
lbl.Cell = i,i
txtbox.Cell = i+1,i
这可以在代码中完成吗?当时似乎没有识别“Cell”属性(我猜是可以理解的)。
更新到 UPDATE REVISITED
我添加了这行代码:
tableLayoutPanelGreatGooglyMoogly.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
...现在我看到标签和文本框实际上位于我希望它们居住的单元格(列和行)中。
但是,我需要让标签从其单元格的左上角向下移动到单元格的中心(垂直和水平)。
即使在设计时(在表单上有一个“测试”/临时 TableLayoutPanel),添加的标签在位于 TableLayoutPanel 单元格内时也不会响应对 TextAlign 属性的更改 - 无论我将 TextAlign 设置为什么(“中间中心”似乎是最明智的),它们顽固地固定在牢房的左上角。
同样,在设计时更改标签的 Location.X 和 Location.Y 没有任何作用。标签贴在牢房的西北角,就像藤壶贴在失散已久的锚上。