C# 为什么不';t放置在TableLayoutPanels中的控件“;捕捉到;他们的";细胞;?
我动态地创建一个TableLayoutPanel,然后动态地创建标签和文本框以放入其中 我可以将列数和行数分配给TableLayoutPanel,这似乎是合乎逻辑的:C# 为什么不';t放置在TableLayoutPanels中的控件“;捕捉到;他们的";细胞;?,c#,winforms,dynamic,tablelayoutpanel,C#,Winforms,Dynamic,Tablelayoutpanel,我动态地创建一个TableLayoutPanel,然后动态地创建标签和文本框以放入其中 我可以将列数和行数分配给TableLayoutPanel,这似乎是合乎逻辑的: tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel(); tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS; tableLayoutPanelGreatGooglyMoogly.ColumnCount
tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel();
tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS;
tableLayoutPanelGreatGooglyMoogly.ColumnCount = NUMBER_OF_COLUMNS;
…创建要放置在其中的控件:
Label lbl = new Label();
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
. . .
…然后将创建的控件放入指定的“单元格”(列和行):
…但这不起作用-如果我为动态创建的子控件指定宽度和高度值,或者如果我不指定(在这种情况下,它们太大,特别是它们的宽度太大)
更新
我添加了这段代码,没有任何区别:
//排
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”属性在当时似乎没有被识别(我想这是可以理解的)
更新到重新访问的更新
我添加了这行代码:
tableLayoutPanelGreatGooglyMoogly.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
…现在我看到标签和文本框实际上位于我希望它们驻留的单元格(列和行)中
但是,我需要让标签从单元格的左上角向下移动到单元格的中心(垂直和水平)
即使在设计时(表单上有一个“测试”/“临时TableLayoutPanel”),当添加的标签位于TableLayoutPanel单元格内时,它们也不会响应TextAlign属性的更改-无论我将TextAlign设置为什么(“中心”似乎最合理),它们都会顽固地固定在单元格的左上角
类似地,在设计时更改标签的Location.X和Location.Y也没有任何作用。标签粘在单元格的西北角,就像藤壶粘在丢失已久的锚点上一样。使用GridLayoutPanel的一个重要部分很少提及,那就是在子控件中使用anchor属性 Anchor属性确定每个子控件将延伸到单元格的哪个边 创建标签时,您的操作如下:
Label lbl = new Label();
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
它应该将标签拉伸到单元格的完整大小
请参见“使用停靠和锚定在单元格内定位控件”一节。使用GridLayoutPanel的一个重要部分很少提及,即在子控件中使用锚定属性 Anchor属性确定每个子控件将延伸到单元格的哪个边 创建标签时,您的操作如下:
Label lbl = new Label();
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;
它应该将标签拉伸到单元格的完整大小
请参阅“使用停靠和锚定在单元格内定位控件”一节。在有趣的回答中回答-这一定是我的代码中的内容,但当我将其添加到动态创建的标签中时,最后一行标签根本不显示;当我将其添加到动态创建的文本框中时,最后一行的底边会被剪裁。您可能还想查看“Dock”属性。有趣的是,它一定是我的代码中的某个内容,但当我将其添加到动态创建的标签中时,最后一行标签根本不会显示;当我将其添加到动态创建的文本框中时,最后一行的底边会被剪裁。您可能还需要查看“Dock”属性。