0

我正在动态创建一个 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 没有任何作用。标签贴在牢房的西北角,就像藤壶贴在失散已久的锚上。

4

1 回答 1

3

很少提及使用 GridLayoutPanel 的一个重要部分是在子控件中使用 Anchor 属性。

Anchor 属性确定每个子控件将扩展到单元格的哪个边缘。

创建标签时,您可以这样做:

Label lbl = new Label();
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
lbl.Parent = tableLayoutPanelGreatGooglyMoogly;

它应该将标签拉伸到单元格的完整大小。

请参阅“使用停靠和锚定在单元内定位控件”部分中的 http://msdn.microsoft.com/en-us/library/w4yc3e8c(v=vs.80).aspx

于 2012-05-09T06:14:16.437 回答