Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不';t放置在TableLayoutPanels中的控件“;捕捉到;他们的";细胞;?_C#_Winforms_Dynamic_Tablelayoutpanel - Fatal编程技术网

C# 为什么不';t放置在TableLayoutPanels中的控件“;捕捉到;他们的";细胞;?

C# 为什么不';t放置在TableLayoutPanels中的控件“;捕捉到;他们的";细胞;?,c#,winforms,dynamic,tablelayoutpanel,C#,Winforms,Dynamic,Tablelayoutpanel,我动态地创建一个TableLayoutPanel,然后动态地创建标签和文本框以放入其中 我可以将列数和行数分配给TableLayoutPanel,这似乎是合乎逻辑的: tableLayoutPanelGreatGooglyMoogly = new TableLayoutPanel(); tableLayoutPanelGreatGooglyMoogly.RowCount = NUMBER_OF_ROWS; tableLayoutPanelGreatGooglyMoogly.ColumnCount

我动态地创建一个TableLayoutPanel,然后动态地创建标签和文本框以放入其中

我可以将列数和行数分配给TableLayoutPanel,这似乎是合乎逻辑的:

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”属性。